7

data.table のすべての列に関数を適用したいと思います。したがって、私は lapply で .SD を使用します。しかし、ラップリー内では、テーブルの列を取得できません。

例えば

x = data.table(a=1:10, b=10:1, id=1:5)
x[,lapply(.SD,function(t){t*id}),.SDcols=c(1,2)]
Error in ..FUN(a) : object 'id' not found

私は次のことを行います:

x[,lapply(.SD,function(t){t*x$id}),.SDcols=c(1,2)]

もっとうまくやれるでしょうか?

4

1 に答える 1

5

削除するだけ.SDcols=c(1,2)です。3 番目の列を削除します ( id)

 > x[,lapply(.SD,function(t){t*id})]
     a  b id
 1:  1 10  1
 2:  4 18  4
 3:  9 24  9
 4: 16 28 16
 5: 25 30 25
 6:  6  5  1
 7: 14  8  4
 8: 24  9  9
 9: 36  8 16
10: 50  5 25

を持たない場合id、次のすべてが機能します。

x[,lapply(.SD[,list(a,b)], `*`, id)]

x[,lapply(.SD[,-3], `*`, id)]

x[,lapply(.SD, `*`,id)][, list(a,b)]
于 2013-07-02T08:02:30.130 に答える