如何通过数据帧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