私はdata.tableを使って簡単なループを行いたいと思います。私は(var_20にVAR_1から)20二分(0,1)の変数を持っていると私はこのためにループを行いたいと思います:data.tableを持つ単純なループ
dat[var_1==1, newvar:=1]
dat[var_2==1, newvar:=2]
dat[var_3==1, newvar:=3]
...
dat[var_20==1, newvar:=21]
私の主な問題は、私は私(すなわちVAR_1 =を指定する方法がわからないです= 1、var_2 == 2 ...)ループを使用しています。短い例以下は :
var_1 <- c(1, rep(0,9))
var_2 <- c(0,1, rep(0,8))
var_3 <- c(0,0,1, rep(0,7))
dat <- data.table(var_1, var_2, var_3)
dat[var_1==1, newvar:=1]
dat[var_2==1, newvar:=2]
dat[var_3==1, newvar:=3]
ループでこれを行う方法についての任意のアイデア? ありがとう!
ありがとうございます。そのnewvarを行う方法を知っていますか?= 1Lが1から変数の数に増加します(たとえば、newvarはvar_2の場合は2、var_3の場合は3など)。また、いくつかの変数に値1が同時に設定されている可能性もあります。その場合は、より大きな値(例えば、var_1 = 1、var_3 = 1、newvar = 3を取得したい場合)を代入したいと考えています。 – sdaza
上記のコードはこれを行う必要があります。私は大規模なdata.tablesでシーケンシャルしかし単一のベクトルスキャンと比較してキーを繰り返し設定することのパフォーマンスに興味があるだろう – mnel
@WojciechSobala通常は、setkeyを使うほうが良いが、setkeyはソートの過程で列のすべての値(スキャン)それ。したがって、単一列の単一値を1回スキャンする特別な場合、ベクトルスキャンはsetkey + joinよりも速くなければなりません。テストする価値はありますが、私はそれを自分でテストしていません。 –