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

これは、複数の新しい値がどこにあるという効果でもあります。たとえば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 に答える