如何将值添加到一个数据帧,该数据帧对应于来自另一个数据帧的vector的相等值

时间:2016-07-06 15:37:17

标签: r

我的英语不允许我确切地问这个问题应该如何询问,所以我会举例说明。 我有一个这样的数据帧:

A  0   20
A  20  30
A  30  50
A  50  100
...
B  0  30
B  30 150
...

另一个像:

A  20  30   1.0
A  50  100  2.5
B  30  150  -1.02

基本上我想要修改第一个数据集,这样如果前三列中的值在数据集和零(或NAs)中相等,那么它将具有第二个数据帧第四列的值:

A  0   20  0
A  20  30  1.0
A  30  50  0
A  50  100 2.5
...
B  0   30  0
B  30  150 -1.02 

当然,我可以用丑陋的for循环做到这一点,但我的直觉告诉我,有更优雅的方法来解决这个问题,也许有一些高级包。

1 个答案:

答案 0 :(得分:0)

与建议的评论一样,merge()实现了左连接:

a <- data.frame(  "a" = c("A","A","A","A","B","B"), "b" = c(0,20,30,50,0,30), "c" = c(20,30,50,100,30,150) )
b <- data.frame( "a" = c("A","A","B"), "b"= c(20,50,30), "c" = c(30,100,150) , "d" = c(1,2.5,-1.02) )

merge(x = a, y = b , by = c("a","b","c") , all.x = TRUE )

all.x告诉merge保留a中不匹配的示例