Oblicz sumę listy zmiennych według grup
Mam dane.tabela z jednym kluczem i około 100 wierszami liczbowymi, z których jeden jest ustawiony na key. Chciałbym utworzyć nową zmienną, która zawiera podsumowanie każdego wiersza liczbowego, pogrupowane według klucza.
Na przykład moje dane to
ID Count1 Count2 Count3
1 1 3 0
1 3 3 3
2 1 2 1
3 1 1 2
To co chciałbym mieć to:
ID Count1 Count2 Count3
1 4 6 3
2 1 2 1
3 1 1 2
Próbowałem na wiele sposobów, żeby to zdobyć. Wiem, że potrafię:
Y <- X[, list(Count=sum(Count1), Count2=sum(Count2), Count3=sum(Count3), by = ID]
Jednakże, mam setki zmiennych, i dostaję tylko ich nazwy na liście. Jak mam sobie radzić to?
Wielkie dzięki za pomoc.Oto kod do wygenerowania danych testowych:
ID <-c(rep(210, 9), rep(3917,6))
Count1 <- c(1,1,0,1,3,1,4,1,1,1,1,1,1,0,1)
Count2 <- c(1,0,0,1,0,1,0,1,1,1,1,1,1,0,1)
Count3 <- c(1,0,0,1,0,1,0,1,1,1,1,1,1,0,1)
x <- data.table(ID, Count1, Count2, Count3)
setkey(x, ID)
22
2 answers
Twoje dane testowe nie pasują do podanego przez Ciebie przykładu, ale niezależnie od tego - możesz skorzystać z faktu, że data.table()
ma operator o nazwie .SD
dla "podzbioru danych. Więc to powinno zadziałać:
x[, lapply(.SD, sum), by = ID]
#----
ID Count Count2 Count3
1: 210 13 5 5
2: 3917 5 5 5
Jest to właściwie opisane w FAQ: wpisz vignette("datatable-faq", package="data.table")
lub znajdź online . 26
Author: Chase,
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
2017-02-16 21:24:39
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
2017-02-16 21:24:39
Jako dane.tabela jest danymi.ramka, można do tego użyć agregatu:
> aggregate(. ~ ID, data=x, FUN=sum)
ID Count1 Count2 Count3
1 210 13 5 5
2 3917 5 5 5
11
Author: Matthew Lundberg,
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
2012-12-02 06:58:23
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
2012-12-02 06:58:23