如何计算数据帧R中另一列值的字符串频率

时间:2018-05-01 17:46:23

标签: r dataframe frequency

我正在使用的数据框的简化是:

> 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 :(得分:1)

在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")

答案 1 :(得分:0)

当基础R包含table函数时,似乎很难加载包。

> table(df1)
      nomMun
Any    BEGUR CADAQUES
  2010     1        1
  2011     1        1
  2012     1        1

答案 2 :(得分:0)

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