2013-05-28 25 views
28

sütunlarının bir alt kümesine bir işlev uygulayarak, her birine tek tek atıfta bulunmadan büyük bir data.table içindeki bir sütun grubuna bir işlev uygulamayı deniyorum. Yukarıdaki MWE ile R Datatable,

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') 

bu:

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

çalışır, ancak bu:

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

çalışmaz. as.numeric işlevini, a'un 2 ve 3. sütunlarına tek tek atıfta bulunmadan uygulamak için doğru yol hangisidir?

cevap

40

deyimsel yaklaşım Sen olmak ÜSÖ zorlayabilir .SD ve .SDcols

kullanmaktır

Teşekkürler (fiili verilerde sütun onlarca bu pratik olurdu böylece orada set) kolonlar için ()

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

içinde sarma ile ana çerçeve değerlendirilmiştir 2: 3

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

veya

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

siz "tarafından" kullanmak istiyorsanız 'mysubset' içinde peşin olarak, dahil edilecek olan olmadığını burada gruplama? –

+1

@TrevorAlexander - Hayır, By sütunları '.SD' içinde değil," .SD "oluşturulduğu ortamda tek değerler olarak bulunur. – mnel

+0

Merhaba, işlevi tüm sütunlara uygulamak isterim ancak 'b' ise bunu nasıl kullanırım? Teşekkürler! – Christa