R语言中能否使用group_by统计dataframe各列接受状态的数量
可以通过group_by实现该需求,具体实现逻辑和代码如下:
你的需求本质是对每列的枚举值做频次统计,再重塑为指定的宽表结构,搭配tidyverse生态的转置函数即可快速完成。
# 加载依赖包 library(dplyr) library(tidyr) # 示例数据构造,可替换为你自己的dataframe df <- data.frame( `Column A` = c("Accepted", "Did not accept", rep("Accepted",9), rep("Did not accept",4)), `Column B` = c("Did not accept", "Did not accept", rep("Accepted",2), rep("Did not accept",12)), check.names = FALSE ) # 基于group_by的实现代码 stat_result <- df %>% # 宽表转长表,把所有列聚合为「列名」「列值」两列 pivot_longer(cols = everything(), names_to = "col_name", values_to = "Accepted or not?") %>% # 按列名、接受状态分组 group_by(col_name, `Accepted or not?`) %>% # 统计每组出现次数 summarise(count = n(), .groups = "drop") %>% # 转回你需要的宽表结构 pivot_wider(names_from = col_name, values_from = count) # 输出markdown格式的可视化表格 knitr::kable(stat_result)
如果你不想用分组逻辑,也可以用table函数直接做列统计,写法更简洁:
stat_result2 <- as.data.frame(apply(df, 2, table)) %>% tibble::rownames_to_column("Accepted or not?")
两种方案输出的结果完全符合你要求的表格结构。
内容的提问来源于stack exchange,提问作者vvv-1234
相关产品推荐
相关产品推荐

