我正在使用的数据框的简化是:
> 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
你能帮助我吗?
很抱歉,如果我的解释不好......我是非母语的人,这是我第一次在这里问...
答案 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