Data.frame合并用于选择性行替换的用法

时间:2012-12-11 16:43:58

标签: r

  

可能重复:
  how to use merge() to update a table in 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操作是否有正确的英文术语,是否有预先构建的功能?

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

这也是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