【问题标题】:How to add values to one dataframe that correspond to equal values of vector from another dataframe如何将值添加到一个数据帧中,这些值对应于来自另一个数据帧的向量的相等值
【发布时间】:2016-07-06 15:37:16
【问题描述】:

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

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

基本上我想修改第一个数据集,以便如果前三列中的值在数据集中相等且在其他情况下为零(或 NA),它将具有来自第二个数据帧第四列的值:

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 循环来做到这一点,但我的直觉告诉我,有更优雅的方法可以解决这个问题,也许可以使用一些高级包。

【问题讨论】:

标签: r


【解决方案1】:

就像 cmets 建议的那样,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 中不匹配的示例

【讨论】:

  • 非常感谢,大卫!我认为您的答案更好,因为您指向 all.x
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 2021-02-26
相关资源
最近更新 更多