如何将table()生成的多列频数统计结果转换为指定结构的DataFrame?
解决方案
方法一:基础R实现
通过循环遍历目标列,将每列的频数统计结果转换为单行数据,再合并为最终数据框:
# 指定需要处理的列名 target_cols <- c("ag", "bg", "cg", "dg", "eg") # 循环处理每一列,把table结果转成单行数据框 freq_list <- lapply(target_cols, function(col) { as.data.frame(t(table(df[[col]]))) }) # 合并所有行数据 final_df <- do.call(rbind, freq_list) # 添加Group列对应原数据列名 final_df$Group <- target_cols # 查看结果 final_df
方法二:tidyverse工具包实现
用管道式操作完成,代码更简洁直观:
library(tidyverse) final_df <- df %>% # 把所有列转成长格式,列名存为Group,值存为Value pivot_longer(everything(), names_to = "Group", values_to = "Value") %>% # 按Group和Value统计频数 count(Group, Value) %>% # 转回宽格式,把Value的取值设为列名,频数作为对应值 pivot_wider(names_from = Value, values_from = n) # 查看结果 final_df
两种方法最终都会生成你需要的结构:
High Low Moderate Group 1 648 628 628 ag 2 648 628 628 bg 3 648 628 628 cg 4 648 628 628 dg 5 648 628 628 eg
内容的提问来源于stack exchange,提问作者user2110417
相关产品推荐
相关产品推荐

