2

長さの異なる 2 つのデータ フレームがあり、最初のデータ フレームに新しい列を追加し、2 番目のデータ フレームの対応する値を使用したいと考えています。

対応する値は次の条件if (DF1[i,1] == DF2[,1] & DF1[i,2] == DF2[i,2]) == TRUEで定義され、この行の値は DF2 から取得され、に書き込まれDF1$newColumn[i]ます。

次のデータ フレームは、質問を説明するために使用されます。

DF1<-data.frame(X = rep(c("A","B","C"),each=3),
                Y = rep(c("a","b","c"),each=3))

DF2<-data.frame(X = c("A","B","C"),
                Y = c("a","b","c"),
                Z = c(1:3))

上記のテキストのようにステートメントを使用しようとしif()ましたが、条件が TRUE/FALSE のベクトルを返し、うまくいかないようです。

私が今使っている動作するコードは

  for (i in 1 : length(DF1[,1])) {
  DF1$Z[i] <- subset(DF2,DF2$X == DF1$X[i] & DF2$Y == DF1$Y[i])$Z               
}

ただし、それは信じられないほど遅いです (ユーザーシステムは、私の完全なデータフレームで 115.498 12.341 127.799 を経過しました)、これをコーディングするより効率的な方法が必要です。また、ベクトル化はループよりも効率的であることを繰り返し読みましたが、その方法がわかりません。

私は条件文を扱う必要がありますが、次のようなものです

DF1$Zz<-rep(DF2$Z,each=3)

私の実際のデータセットでは機能しません。

4

1 に答える 1