2013-08-06 16 views
14

które chciałbym zrobić równowartość poniżej, ale z data.table w „przez”:kruszywa Wszystkie kolumny z data.table

dt <- data.table(V1 = rnorm(100), V2 = rnorm(100), V3 = rnorm(100), 
    group = rbinom(100,2,.5)) 
dt.agg <- aggregate(dt, by=list(dt$group), FUN=mean) 

wiem, że mogę to zrobić:

dt.agg <- dt[, list(V1=mean(V1), V2=mean(V2), V3=mean(V3)), by=group] 

Ale dla sprawy, którą rozważam, mam 100 lub więcej kolumn V1-V100 (i zawsze chcę agregować wszystkie z nich jednym czynnikiem, jak w powyższym zestawie), więc rozwiązanie data.table mam powyżej nie jest możliwe.

+8

odsyłającym między dużą przykładów 'data.table' jest następujący: 'DT [, lapply (.SD, suma), w = X ] '. – joran

+0

@joran, czy mógłbyś wyjaśnić rolę .SD? – POTENZA

+0

'.SD' odnosi się do podzbioru danych. –

Odpowiedz

32
dt[, lapply(.SD, mean), by=group] 

do specifiy kolumny:

dt[,...,by=group, .SDcols=c("V1", "V2", "V3", ...)] 
dt[,...,by=group, .SDcols=names(dt)[1:100]] 
Powiązane problemy