使用R语言pivot_wider()转换宽表并统计出现次数的问题
pivot_wider() 统计月份出现次数的正确配置方案
- 你当前的需求是统计每个State下不同Month的出现次数,
pivot_wider()本身不会自动执行聚合计数逻辑,需要额外指定计数规则 - 原有代码错误原因:仅指定
values_from = "Month"没有绑定计数结果作为填充值,仅按State分组也无法匹配到对应月份的统计值
方法1:提前计算分组计数再转宽(可读性更高,更推荐)
先通过count()统计每个State+Month组合的出现次数,再把计数结果作为values_from的参数:
library(dplyr) library(tidyr) Data <- fm %>% # 统计每个State和Month组合的出现次数,结果存在occur_times列 count(State, Month, name = "occur_times") %>% # 转宽表:列名来自Month,单元格值为对应月份的出现次数,无记录自动填充0 pivot_wider( names_from = Month, values_from = occur_times, values_fill = 0 )
方法2:转宽时同步完成计数
可以通过values_fn参数直接在pivot_wider()内实现计数,不需要提前做分组统计:
Data <- fm %>% pivot_wider( id_cols = State, names_from = Month, values_from = Month, # 指定按length统计每个分组的元素个数即出现次数 values_fn = length, values_fill = 0 )
内容的提问来源于stack exchange,提问作者Phant5x
相关产品推荐
相关产品推荐

