2013-05-28 17 views
28

大規模なdata.table内の列のグループにそれぞれ個別に参照することなく関数を適用しようとしています。R Datatable、列のサブセットに関数を適用する

上記MWEと
a <- data.table(
    a=as.character(rnorm(5)), 
    b=as.character(rnorm(5)), 
    c=as.character(rnorm(5)), 
    d=as.character(rnorm(5)) 
) 
b <- c('a','b','c','d') 

、この:

a[,b=as.numeric(b),with=F] 

作品が、この:

a[,b[2:3]:=data.table(as.numeric(b[2:3])),with=F] 

は動作しません。 の2列目と3列目だけにas.numeric関数を適用する正しい方法は、個別には参照しないでください。

(実際のデータでは、それは非現実的になるように、列の数十があります設定)慣用的なアプローチは、あなたがするRHSを強制することができ.SD.SDcols

を使用することです

おかげ

答えて

40

親フレームで折り返しで評価される

a[, (b) := lapply(.SD, as.numeric), .SDcols = b] 

2列目:3

a[, 2:3 := lapply(.SD, as.numeric), .SDcols = 2:3] 

または

mysubset <- 2:3 
a[, (mysubset) := lapply(.SD, as.numeric), .SDcols = mysubset] 
+0

あなたがここにグループ化「によって」を使用したい場合は、mysubset' 'で、事前に含まれなければならないこと? –

+1

@TrevorAlexander - いいえ、By列は '.SD'ではなく、' .SD'が作成された環境では単一の値として存在します。 – mnel

+0

こんにちは、私は 'b'以外のすべての列に関数を適用したいのですが、どうすれば使用できますか?ありがとう! – Christa

関連する問題