1

可能重复:
如何使用 merge() 更新 R 中的表

对于 R 中的这种操作,合并的正确用途是什么?见下文。

older <- data.frame(Member=c("first","second","third","fourth"),
                       VAL=c(NA,NA,NA,NA))
newer <- data.frame(Member=c("third","first"),
                       VAL=c(2125,4587))

# 
merge.data.frame(older,newer,all=T)
  Member  VAL
  1  first 4587
  2  first   NA
  3 fourth   NA
  4 second   NA
  5  third 2125
  6  third   NA

以上不是我所期望的,我想用新条目替换旧条目,而不是添加另一行。如下所示。我失败了 merge.data.frame。

my.merge.fu(older,newer)
  Member  VAL
  1  first 4587
  2 second   NA
  3  third 2125
  4 fourth   NA

一种选择性行替换,其中较新的成员优先,并且不能包含除较旧成员之外的其他成员。

这种 R 操作是否有适当的英文术语,是否有预建功能?

谢谢你。

4

1 回答 1

1

你已经有效地回答了你自己的问题。

如果你想处理 Matthew Ploude 的观点,你可以使用

older$VAL[match(newer[newer$Member %in% older$Member, ]$Member, older$Member)
          ]  <- newer[newer$Member %in% older$Member, ]$VAL

这也是 where 有多个新值的效果,例如newer,它是最新的older

older <- data.frame(Member=c("first","second","third","fourth"),
                       VAL=c(1234,NA,NA,5678))
newer <- data.frame(Member=c("third","first","fifth","first"),
                       VAL=c(2125,4587,2233,9876))

older$VAL[match(newer[newer$Member %in% older$Member,]$Member, older$Member)
          ]  <- newer[newer$Member %in% older$Member,]$VAL

> older
  Member  VAL
1  first 9876
2 second   NA
3  third 2125
4 fourth 5678
于 2012-12-11T22:36:45.160 回答