Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于具有r中值的唯一ID创建新列_R - Fatal编程技术网

基于具有r中值的唯一ID创建新列

基于具有r中值的唯一ID创建新列,r,R,对于这些ID中的每一个,我想创建一个名为Age的新列,为每个ID填充值0到5(r=0:5),如下所示 数据帧 ID 1124 1123 预期结果 ID Age 1124 0 1124 1 1124 2 1124 3 1124 4 1124 5 1123 0 1123 1 1123 2 1123 3 1123 4 1123 5 如果每个ID的Age值超过6,则此功能也有效 如果每个ID的Age值超过6个,则此功能也可以使用tidyr::expand

对于这些ID中的每一个,我想创建一个名为Age的新列,为每个ID填充值
0到5(r=0:5),如下所示

数据帧

ID         
1124
1123
预期结果

ID   Age
1124  0
1124  1
1124  2
1124  3
1124  4
1124  5
1123  0
1123  1
1123  2
1123  3
1123  4
1123  5
如果每个
ID
Age
值超过6,则此功能也有效


如果每个
ID

Age
值超过6个,则此功能也可以使用
tidyr::expand

library(tidyverse)

df = data_frame(ID = c(1124, 1123))

df %>%
    expand(ID, Age = 0:5)
输出:

# A tibble: 12 x 2
      ID   Age
   <dbl> <int>
 1  1123     0
 2  1123     1
 3  1123     2
 4  1123     3
 5  1123     4
 6  1123     5
 7  1124     0
 8  1124     1
 9  1124     2
10  1124     3
11  1124     4
12  1124     5
#一个tible:12 x 2
身份证年龄
1  1123     0
2  1123     1
3  1123     2
4  1123     3
5  1123     4
6  1123     5
7  1124     0
8  1124     1
9  1124     2
10  1124     3
11  1124     4
12  1124     5

这可以通过
tidyr::expand

library(tidyverse)

df = data_frame(ID = c(1124, 1123))

df %>%
    expand(ID, Age = 0:5)
输出:

# A tibble: 12 x 2
      ID   Age
   <dbl> <int>
 1  1123     0
 2  1123     1
 3  1123     2
 4  1123     3
 5  1123     4
 6  1123     5
 7  1124     0
 8  1124     1
 9  1124     2
10  1124     3
11  1124     4
12  1124     5
#一个tible:12 x 2
身份证年龄
1  1123     0
2  1123     1
3  1123     2
4  1123     3
5  1123     4
6  1123     5
7  1124     0
8  1124     1
9  1124     2
10  1124     3
11  1124     4
12  1124     5

这是一个基本的R版本:

df = data_frame(ID = c(1124, 1123))
expand.grid(ID = df$ID, Age = 0:5)

##      ID Age
## 1  1124   0
## 2  1123   0
## 3  1124   1
## 4  1123   1
## 5  1124   2
## 6  1123   2
## 7  1124   3
## 8  1123   3
## 9  1124   4
## 10 1123   4
## 11 1124   5
## 12 1123   5
这与
tidyr::expand
结果的排序不同

编辑

正如@thelatemail所建议的,您可以执行以下操作以避免重命名
df

expand.grid(c(Age=list(0:5), df))

编辑2

下面是一个
数据表
示例:

library(data.table)
setDT(df) # Convert df to a data.table.
df[, do.call(CJ, list(ID = ID, Age = 0:5))]

对于大型数据集,可能需要对各种方法进行基准测试。

以下是基本的R版本:

df = data_frame(ID = c(1124, 1123))
expand.grid(ID = df$ID, Age = 0:5)

##      ID Age
## 1  1124   0
## 2  1123   0
## 3  1124   1
## 4  1123   1
## 5  1124   2
## 6  1123   2
## 7  1124   3
## 8  1123   3
## 9  1124   4
## 10 1123   4
## 11 1124   5
## 12 1123   5
这与
tidyr::expand
结果的排序不同

编辑

正如@thelatemail所建议的,您可以执行以下操作以避免重命名
df

expand.grid(c(Age=list(0:5), df))

编辑2

下面是一个
数据表
示例:

library(data.table)
setDT(df) # Convert df to a data.table.
df[, do.call(CJ, list(ID = ID, Age = 0:5))]

对于大型数据集,可能需要对各种方法进行基准测试。

我对这个问题的理解是,目前数据帧中每个ID只有一行,我认为这个答案在这种情况下不起作用。我明白了。在这种情况下,我误解了@marius。我对这个问题的理解是,目前数据帧中每个ID只有一行,我认为这个答案在这种情况下不起作用。我明白了。在那种情况下,我误解了@marius,没有重命名
df
-
expand.grid(c(Age=list(0:5),df))
或者笛卡尔式的join-it-
merge(df,list(Age=0:5))
@latemail很棒的建议!无需重命名
df
-
expand.grid(c(Age=list(0:5),df))
或笛卡尔加入它-
merge(df,list(Age=0:5))
@thelatemail伟大的建议!