我的英语不允许我确切地问这个问题应该如何询问,所以我会举例说明。 我有一个这样的数据帧:
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循环做到这一点,但我的直觉告诉我,有更优雅的方法来解决这个问题,也许有一些高级包。
答案 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
中不匹配的示例