df <-data.frame(class = c("a","b","a","a"), date = c(2010,2009,2010,2009))
Решение с использованием базы R:
table(df$class, df$date)
Возвращает:
2009 2010
a 1 2
b 1 0
Решение с использованием dplyr
:
library(dplyr)
df %>%
mutate(date = as.factor(date)) %>%
group_by(class, date, .drop=FALSE) %>%
summarise(N = n())
Возвращает:
# A tibble: 4 x 3
# Groups: class [2]
class date N
<fct> <fct> <int>
1 a 2009 1
2 a 2010 2
3 b 2009 1
4 b 2010 0
С dplyr
мы должны убедиться, что обе группирующие переменные являются факторами, и что мы используем параметр .drop=FALSE
. Таким образом, пустые группы не отбрасываются.