如何在R中将分类列频次统计数据框转换为指定宽表格式
R语言长表转宽表实现方案
你需要的是将分组统计后的长表转换为「行对应HAPPY取值、列对应INCOME取值、单元格为count频次」的宽表,有两种常用实现方式:
方式1:tidyverse管道流方案(适配你现有代码)
你可以直接在原有分组统计的代码后追加pivot_wider逻辑,一步得到结果:
library(tidyverse) df %>% group_by(INCOME, HAPPY) %>% summarise(count = n(), .groups = "drop") %>% pivot_wider( names_from = INCOME, values_from = count, values_fill = 0 )
参数说明:
names_from = INCOME:指定宽表的列名来自INCOME列的取值values_from = count:指定宽表的单元格值来自count列的统计结果values_fill = 0:指定缺失的组合自动填充为0,和你预期的输出完全匹配
如果你已经把分组统计结果存为了中间变量count_df,直接调用转换即可:
count_df %>% pivot_wider(names_from = INCOME, values_from = count, values_fill = 0)
方式2:基础R实现方案
不用加载第三方包,直接用内置的xtabs生成交叉表即可得到你要的结果:
# 直接生成交叉表,输出格式为矩阵 xtabs(~ HAPPY + INCOME, data = df) # 如需转成数据框格式 as.data.frame.matrix(xtabs(~ HAPPY + INCOME, data = df))
内容的提问来源于stack exchange,提问作者R.yan
相关产品推荐
相关产品推荐

