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

Упрощение рабочего кадра, с которым я работаю:

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

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

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

Может ли кто-нибудь помочь мне?

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

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

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

> table(df1)
      nomMun
Any    BEGUR CADAQUES
  2010     1        1
  2011     1        1
  2012     1        1
0 голосов
/ 01 мая 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
0 голосов
/ 01 мая 2018

В 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")
...