Как я могу подсчитать частоту строки по другому значению столбца в кадре данных R

Упрощение фрейма данных, над которым я работаю:

> df1
         Any              nomMun
   1     2010             CADAQUES
   2     2011             CADAQUES
   3     2012             CADAQUES
   4     2010             BEGUR
   5     2011             BEGUR
   6     2012             BEGUR

Я читал какой-то пост и обнаружил, что библиотека count of plyr возвращает фрейм данных со строками и его частотой. Но мне нужна частота по годам. Конечным результатом, который я хочу получить, является кадр данных, например:

> df2
         nomMun       freq_2010     freq_2011     freq_2012
   1     CADAQUES         1             1             1
   2     BEGUR            1             1             1

Не могли бы вы мне помочь?

Извините, если мое объяснение плохое... я не носитель языка, и я впервые спрашиваю здесь...


person Marc Coll    schedule 01.05.2018    source источник


Ответы (3)


В data.table просто используйте .N:

setDT(df1)
df1[, .N, .(nomMun, Any)]

Это даст вам данные в длинном формате. Другими словами, это будет выглядеть так:

Any      nomMum      N
2010     CADAQUES    1
2011     CADAQUES    1
2012     CADAQUES    1
2010     BEGUR       1
2011     BEGUR       1
2012     BEGUR       1

Но тогда вы можете использовать его, если хотите:

dcast(df1[, .N, .(nomMun, Any)], nomMum ~ Any, value.var = "N")
person bk18    schedule 01.05.2018

Глупо загружать пакет, когда базовый R включает функцию table.

> table(df1)
      nomMun
Any    BEGUR CADAQUES
  2010     1        1
  2011     1        1
  2012     1        1
person Brian Davis    schedule 01.05.2018

tidyr::spread можно использовать для получения желаемого результата:

library(tidyverse)
df1 %>% 
  group_by(nomMun, Any) %>%
  mutate(freq = n()) %>%
  spread(Any, freq)

# # A tibble: 2 x 4
# # Groups: nomMun [2]
#    nomMun   `2010` `2011` `2012`
# *  <chr>     <int>  <int>  <int>
# 1 BEGUR         1      1      1
# 2 CADAQUES      1      1      1
person MKR    schedule 01.05.2018