如何使用dplyr统计各name对应的value频数并生成指定宽表?
使用dplyr实现长格式数据的频次统计与宽格式转换
先构造你提供的示例数据集:
library(dplyr) library(tidyr) df <- tibble( name = c("A", "B", "C", "A", "B", "C"), value = c(3, 2, 3, 2, 2, 3) )
可以通过以下步骤实现需求:
result <- df %>% # 统计每个name-value组合的出现次数 count(name, value, name = "count") %>% # 补全所有需要的value值(1到原数据最大value)及所有name的组合,缺失频次填0 complete(value = 1:max(value), name = unique(name), fill = list(count = 0)) %>% # 转换为宽格式,缺失值填充0 pivot_wider(names_from = name, values_from = count, values_fill = 0) %>% # 按value排序,匹配目标表格顺序 arrange(value)
运行后得到的结果:
# A tibble: 3 × 4 value A B C <dbl> <int> <int> <int> 1 1 0 0 0 2 2 1 2 0 3 3 1 0 2
步骤说明:
count(name, value, name = "count"):统计每个name与value组合的出现次数,将结果列命名为count。complete(...):生成所有value(从1到原数据中的最大value)和所有name的完整组合,确保未出现过的value=1也能被包含,同时将缺失的频次设为0。pivot_wider(...):将长格式数据转为宽格式,把name的各个取值(A/B/C)作为列名,count作为对应列的数值,所有缺失位置填充0。arrange(value):按value列升序排序,让结果和目标表格顺序一致。
内容的提问来源于stack exchange,提问作者miguel
相关产品推荐
相关产品推荐

