R podsumowanie wielu kolumn z danymi.tabela

Próbuję użyć danych.tabela przyspieszająca przetwarzanie dużych danych.ramka (300k x 60) wykonana z kilku mniejszych scalonych danych.ramki. Jestem nowy w data.stolik. Dotychczasowy kod wygląda następująco

library(data.table)
a = data.table(index=1:5,a=rnorm(5,10),b=rnorm(5,10),z=rnorm(5,10))
b = data.table(index=6:10,a=rnorm(5,10),b=rnorm(5,10),c=rnorm(5,10),d=rnorm(5,10))
dt = merge(a,b,by=intersect(names(a),names(b)),all=T)
dt$category = sample(letters[1:3],10,replace=T)

I zastanawiałem się, czy istnieje bardziej efektywny sposób niż poniższy, aby podsumować dane.

summ = dt[i=T,j=list(a=sum(a,na.rm=T),b=sum(b,na.rm=T),c=sum(c,na.rm=T),
                     d=sum(d,na.rm=T),z=sum(z,na.rm=T)),by=category]

Nie chcę ręcznie wpisywać wszystkich 50 kolumn, a eval(paste(...)) wydaje się niezgrabny.

Spojrzałem na poniższy przykład, ale wydaje się to trochę skomplikowane dla mojego potrzeb. dzięki

Jak podsumować dane.tabela w wielu kolumnach

Author: Community, 2013-05-13

1 answers

Możesz użyć prostej lapply Instrukcji z .SD

dt[, lapply(.SD, sum, na.rm=TRUE), by=category ]

   category index        a        b        z         c        d
1:        c    19 51.13289 48.49994 42.50884  9.535588 11.53253
2:        b     9 17.34860 20.35022 10.32514 11.764105 10.53127
3:        a    27 25.91616 31.12624  0.00000 29.197343 31.71285

Jeśli chcesz podsumować tylko niektóre kolumny, możesz dodać .SDcols argument

#  note that .SDcols also allows reordering of the columns
dt[, lapply(.SD, sum, na.rm=TRUE), by=category, .SDcols=c("a", "c", "z") ] 

   category        a         c        z
1:        c 51.13289  9.535588 42.50884
2:        b 17.34860 11.764105 10.32514
3:        a 25.91616 29.197343  0.00000

To oczywiście nie jest ograniczone do sum i możesz używać dowolnej funkcji z lapply, w tym funkcji anonimowych. (tzn. jest to zwykłe lapply stwierdzenie).

Wreszcie, nie ma potrzeby stosowania i=T i j= <..>. Osobiście uważam, że to sprawia, że kod jest mniej czytelny, ale jest to tylko preferencja stylu.


EDIT: dokumentacja

Znajdziesz dokumentację .SD i kilka innych zmiennych specjalnych pod
sekcja pomocy ?"[.data.table" (w sekcji argumenty poszukaj pod info dla by).

Spójrz również na dane.tabela FAQ 2.1

Http://datatable.r-forge.r-project.org/datatable-faq.pdf

 76
Author: Ricardo Saporta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-13 02:13:31