この質問の続きとして、マージ時に y データ フレームから一意でない変数のみをマークする方法を探しています。
のデフォルトsuffixes
は、長さが 2 のベクトルを探すことです。
このリストがあるとします。
a <- list(A = data.frame(id = c(01, 02), a=runif(2), b=runif(2)),
B = data.frame(id = c(01, 02), b=runif(2), c=runif(2)),
C = data.frame(id = c(01, 02), c=runif(2), d=runif(2)))
a
$A
id a b
1 1 0.6922513 0.9966336
2 2 0.9216164 0.8256744
$B
id b c
1 1 0.2242940 0.7058331
2 2 0.4474754 0.9228213
$C
id c d
1 1 0.969796 0.1761250
2 2 0.633697 0.6618188
次に、いくつかのデータ フレームを 1 つずつマージするカスタマイズを行います。ここでは、1 つのデータ フレームを取り出して例を示します。
df <- a[[1]]
a <- a[setdiff(names(a), names(a[1]))]
次に、この方法でリストをマージします。
for(i in seq_along(a)) {
v <- a[[i]] # extract value
ns <- names(a)
n <- ns[[i]] # extract name
df <-merge(df, v, by.x="id", by.y="id", all.x=T,
suffixes=paste(".", n, sep = ""))
}
df
id a b.B bNA c.C cNA d
1 1 0.6922513 0.9966336 0.2242940 0.7058331 0.969796 0.1761250
2 2 0.9216164 0.8256744 0.4474754 0.9228213 0.633697 0.6618188
問題は、上に示したように、R が一意でない変数の両方にマークを追加することですが、1 つの名前しか指定しn
なかったためNA
、「他の」変数にマークが付けられます。上記の例では、A データ フレームから変数に .B サフィックスを取得します。
正しいデータ フレーム名を両方の変数に追加するか、(推奨) マージ時に y の変数を排他的にマークする方法はありますか?