5

data.tableを使用して単純なループを実行したいと思います。20個の二分(0,1)変数(var_1からvar_20まで)があり、これに対してループを実行したいと思います。

dat[var_1==1, newvar:=1]
dat[var_2==1, newvar:=2]
dat[var_3==1, newvar:=3]
...
dat[var_20==1, newvar:=21]

私の主な問題は、ループを使用してi(つまり、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]

ループでこれを行う方法についてのアイデアはありますか?ありがとう!

4

2 に答える 2

4

data.table クラスを利用するには、キーを設定することをお勧めします。

dat[ ,newvar:= NA_integer_]
for(i in ncol(dat)) {
 setkeyv(dat, names(dat)[i])
 dat[J(1), newvar:=i]
}
于 2012-12-02T13:37:43.470 に答える
4

このようなものが機能します。

nams <- names(dat)
for(n in seq_along(nams)){
  nam <- nams[n] 
  char <- sprintf('%s==1',nam)
  dat[eval(parse(text=char)), newvar := n]
}
dat
var_1 var_2 var_3 newvar
1:     1     0     0      1
2:     0     1     0      2
3:     0     0     1      3
4:     0     0     0     NA
5:     0     0     0     NA
6:     0     0     0     NA
7:     0     0     0     NA
8:     0     0     0     NA
9:     0     0     0     NA
10:    0     0     0     NA
于 2012-12-02T05:12:34.210 に答える