Подсчитать количество строк в каждой группе - PullRequest
89 голосов
/ 21 марта 2012

У меня есть фрейм данных, и я хотел бы посчитать количество строк в каждой группе.Я регулярно использую функцию aggregate для суммирования данных следующим образом:

df2 <- aggregate(x ~ Year + Month, data = df1, sum)

Теперь я хотел бы посчитать наблюдения, но не могу найти подходящий аргумент для FUN.Интуитивно я подумал, что это будет выглядеть следующим образом:

df2 <- aggregate(x ~ Year + Month, data = df1, count)

Но нет такой удачи.

Есть идеи?


Некоторые данные игрушек:

set.seed(2)
df1 <- data.frame(x = 1:20,
                  Year = sample(2012:2014, 20, replace = TRUE),
                  Month = sample(month.abb[1:3], 20, replace = TRUE))

Ответы [ 12 ]

0 голосов
/ 25 ноября 2018

Вы можете использовать by функции как by(df1$Year, df1$Month, count), которые будут создавать список необходимой агрегации.

Вывод будет выглядеть,

df1$Month: Feb
     x freq
1 2012    1
2 2013    1
3 2014    5
--------------------------------------------------------------- 
df1$Month: Jan
     x freq
1 2012    5
2 2013    2
--------------------------------------------------------------- 
df1$Month: Mar
     x freq
1 2012    1
2 2013    3
3 2014    2
> 
0 голосов
/ 23 февраля 2018

Учитывая ответ @Ben, R выдаст ошибку, если df1 не содержит столбец x. Но это может быть решено элегантно с paste:

aggregate(paste(Year, Month) ~ Year + Month, data = df1, FUN = NROW)

Аналогично, это можно обобщить, если в группировке используется более двух переменных:

aggregate(paste(Year, Month, Day) ~ Year + Month + Day, data = df1, FUN = NROW)
...