Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/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,我有两个数据帧(df1,df2)。我想填写从df1到df2的年龄和性别值,条件是两者具有相同的ID。我尝试了几种使用for循环和检查两个数据帧之间的主题ID匹配的方法,但都失败了。结果应与df3中的结果相同。我有一个巨大的数据集,所以我想要一段R代码,可以很容易地做到这一点。我将感谢你在这方面的帮助。多谢各位 df1: ID AGE SEX 90901 39 0 90902 28 0 90903 40 1 df2: ID AGE SEX Conc 909

我有两个数据帧(df1,df2)。我想填写从df1到df2的年龄和性别值,条件是两者具有相同的ID。我尝试了几种使用for循环和检查两个数据帧之间的主题ID匹配的方法,但都失败了。结果应与df3中的结果相同。我有一个巨大的数据集,所以我想要一段R代码,可以很容易地做到这一点。我将感谢你在这方面的帮助。多谢各位

df1:
ID    AGE   SEX
90901   39  0
90902   28  0
90903   40  1

df2:
ID     AGE  SEX  Conc
90901   NA  NA    5
90901   NA  NA    10
90901   NA  NA    15
90903   NA  NA    30
90903   NA  NA    5
90902   NA  NA    2.45
90902   NA  NA    51
90902   NA  NA    1
70905   NA  NA    0.5

result:
df3:
ID     AGE  SEX  Conc
90901   39  0     5
90901   39  0     10
90901   39  0     15
90903   40  1    30
90903   40  1    5
90902   28  1    2.45
90902   28  0    51
90902   28  0     1
70905   NA  NA    0.5
尝试
合并(df1,df2,by=“id”)
。这将把两个数据帧合并在一起。如果您的示例很好地表示了您的实际数据,那么您可能希望在合并之前从df2中删除年龄和性别列

df2$AGE <- NULL
df2$SEX <- NULL
df3 <- merge(df1, df2, by = "id")

df2$AGE您可以使用
match
lappy
进行此操作。如果我们在名称向量上对每个原始数据集的
ID
列进行匹配迭代,就可以得到所需的结果

nm <- c("AGE", "SEX")
df2[nm] <- lapply(nm, function(x) df1[[x]][match(df2$ID, df1$ID)])
df2
#      ID AGE SEX  Conc
# 1 90901  39   0  5.00
# 2 90901  39   0 10.00
# 3 90901  39   0 15.00
# 4 90903  40   1 30.00
# 5 90903  40   1  5.00
# 6 90902  28   0  2.45
# 7 90902  28   0 51.00
# 8 90902  28   0  1.00
# 9 70905  NA  NA  0.50

nm可能重复的谢谢大家!这太神奇了:-)我希望我能理解并使用apply系列函数。它们非常有用,但需要认真思考。如果有人能引导我找到一些有用的资源,那就太好了。有没有办法应用此方法,使其不会覆盖df2$AG中的任何非NA值E和df2$SEX?这个解决方案不知从何而来,为我节省了数小时的搜索时间。谢谢。这是可行的,但最初的数据帧有250Mb,现在有485Gb。。。
nm <- c("AGE", "SEX")
df2[nm] <- lapply(nm, function(x) df1[[x]][match(df2$ID, df1$ID)])
df2
#      ID AGE SEX  Conc
# 1 90901  39   0  5.00
# 2 90901  39   0 10.00
# 3 90901  39   0 15.00
# 4 90903  40   1 30.00
# 5 90903  40   1  5.00
# 6 90902  28   0  2.45
# 7 90902  28   0 51.00
# 8 90902  28   0  1.00
# 9 70905  NA  NA  0.50