Rに〜10mmの行data.tableがあり、変数の値の一部を更新するコードを書いています。残念ながら、ループ文を使用する必要があります。i
の代入演算子:=
を複数の条件で使用すると、コードは非常に遅くなります(1ループあたり約2.3分)。私は複数の条件と代入演算子を組み合わせるより効率的な方法があるのだろうかと思っていました。例えば:私がする必要がどのようなR:複数の条件でdata.tableに値を割り当てる効率的な方法
require(data.table)
set.seed(123)
x <- data.table(V1 = LETTERS[1:3], V2 = rnorm(10), V3 = NA)
y <- data.table(V1 = LETTERS[1],V3 = TRUE)
x
V1 V2 V3
1: A -0.56047565 NA
2: B -0.23017749 NA
3: C 1.55870831 NA
4: A 0.07050839 NA
5: B 0.12928774 NA
6: C 1.71506499 NA
7: A 0.46091621 NA
8: B -1.26506123 NA
9: C -0.68685285 NA
10: A -0.44566197 NA
y
V1 V3
1: A TRUE
はy$V3
x$V3
に与えられた一定の条件を割り当てることです。
x[V1==y$V1 & V2 >= 0,V3:=y$V3]
x
V1 V2 V3
1: A -0.56047565 NA
2: B -0.23017749 NA
3: C 1.55870831 NA
4: A 0.07050839 TRUE
5: B 0.12928774 NA
6: C 1.71506499 NA
7: A 0.46091621 TRUE
8: B -1.26506123 NA
9: C -0.68685285 NA
10: A -0.44566197 NA
ただし、これは自分のコードでは時間がかかりすぎます。
おかげで、最新の開発版では
あなたはおそらく両方のセットに 'V1'するキーを設定して、' X [Y]をやったほうが良いと思います'参加する。 – thelatemail
これはもっと知ることなく解決するのが難しいと思います。私はちょうど10Mの行にあなたの操作を実行し、それは1秒で完了しました...私はここでもっと続ける必要があると感じます – Jason
@thelatemail応答に感謝します。この場合、結合文に第2の条件 'V2> = 0'を含める方法はありますか?私の実際のコードでは、私は主キーを持っていません。代わりに、PKの不在を「補っている」〜10条件文の組み合わせです。 –