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

如何通过数据帧R中的另一列值来计算字符串的频率,r,dataframe,frequency,R,Dataframe,Frequency,我正在工作的数据帧的简化是: > df1 Any nomMun 1 2010 CADAQUES 2 2011 CADAQUES 3 2012 CADAQUES 4 2010 BEGUR 5 2011 BEGUR 6 2012

我正在工作的数据帧的简化是:

> df1
         Any              nomMun
   1     2010             CADAQUES
   2     2011             CADAQUES
   3     2012             CADAQUES
   4     2010             BEGUR
   5     2011             BEGUR
   6     2012             BEGUR
我一直在读一些帖子,发现plyr库的count返回一个带有字符串的数据帧及其频率。但我希望每年的频率。我想要得到的最终结果是一个数据帧,如:

> df2
         nomMun       freq_2010     freq_2011     freq_2012
   1     CADAQUES         1             1             1
   2     BEGUR            1             1             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:

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

当base R包含
函数时加载包似乎很愚蠢

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

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
库(tidyverse)
df1%>%
分组依据(nomMun,任意)%>%
变异(freq=n())%>%
排列(任何,频率)
##A tibble:2 x 4
##组:nomMun[2]
#nomMun`2010``2011``2012`
# *           
#1贝格尔11
#2具尸体1