次の例では:Rに複数列の値のベクトルを比較data.table
DT <- data.table(A1=c(1,2),A2=c(2,3),B1=c(1,2),B2=c(3,4),B3=c(2,5))
IカラムA1およびA2の値が両方B1、B2又はB3のいずれかで起こるかどうかを行ごとにチェックします。
私が行う場合:
DT[,BOTH_PRESENT:=!(F %in% (c(A1,A2) %in% c(B1,B2,B3)))]
この利回りを:
A1 A2 B1 B2 B3 BOTH_PRESENT
1: 1 2 1 3 2 TRUE
2: 2 3 2 4 5 TRUE
私は2番目の行のための第一の行のTrueとFalse期待するだろうが
。# Row 1
!(F %in% (c(1,2) %in% c(1,3,2)))
# Row 2
!(F %in% (c(2,3) %in% c(2,4,5)))
コードを変更するにはどうすればよいですか?
私の実際のデータセットは、列の面ではるかに大きいので、(A1 == B1 | A1 == B2 | A1 == B3) & (A2 == B1 | A2 == B2 | A2 == B3)
のような表現はすばらしい解決策にはなりません。
なぜdownvote?あなたがそうしたらフィードバックを提供してください。 –
私は最終的に解決策が実際にはかなり効率的だと思います。列数が多い場合は、式をプログラムで作成する必要があります。 – Roland
よろしくお願いします。 –