通过匹配 r 中的 id 来改变数据帧
Mutate dataframes by matching ids in r
我有三个数据框:
df1:
id score1
1 50
2 23
3 40
4 68
5 82
6 38
df2:
id score2
1 33
2 23
4 64
5 12
6 32
df3:
id score3
1 50
2 23
3 40
4 68
5 82
我想将三个分数变异成这样的数据框,使用 NA 表示缺失值
id score1 score2 score3
1 50 33 50
2 23 23 23
3 40 NA 40
4 68 64 68
5 82 12 82
6 38 32 NA
或者像这样,删除 NA 值:
id score1 score2 score3
1 50 33 50
2 23 23 23
4 68 64 68
5 82 12 82
但是,mutate(在 dplyer 中)不会采用不同的长度。所以我不能变异。我该怎么做?
你可以试试
Reduce(function(...) merge(..., by='id'), list(df1, df2, df3))
# id score1 score2 score3
#1 1 50 33 50
#2 2 23 23 23
#3 4 68 64 68
#4 5 82 12 82
如果您有许多数据集对象名称的模式为 'df' 后跟数字
Reduce(function(...) merge(..., by='id'), mget(paste0('df',1:3)))
或者您可以使用 ls(pattern='df\d+')
而不是 paste0('df', 1:3)
,正如@DavidArenburg
所评论的那样
我有三个数据框:
df1:
id score1
1 50
2 23
3 40
4 68
5 82
6 38
df2:
id score2
1 33
2 23
4 64
5 12
6 32
df3:
id score3
1 50
2 23
3 40
4 68
5 82
我想将三个分数变异成这样的数据框,使用 NA 表示缺失值
id score1 score2 score3
1 50 33 50
2 23 23 23
3 40 NA 40
4 68 64 68
5 82 12 82
6 38 32 NA
或者像这样,删除 NA 值:
id score1 score2 score3
1 50 33 50
2 23 23 23
4 68 64 68
5 82 12 82
但是,mutate(在 dplyer 中)不会采用不同的长度。所以我不能变异。我该怎么做?
你可以试试
Reduce(function(...) merge(..., by='id'), list(df1, df2, df3))
# id score1 score2 score3
#1 1 50 33 50
#2 2 23 23 23
#3 4 68 64 68
#4 5 82 12 82
如果您有许多数据集对象名称的模式为 'df' 后跟数字
Reduce(function(...) merge(..., by='id'), mget(paste0('df',1:3)))
或者您可以使用 ls(pattern='df\d+')
而不是 paste0('df', 1:3)
,正如@DavidArenburg