如何按诊断分组计算数据框中各列1值的占比?
解决方法
方法一:使用dplyr包(tidyverse生态)
先加载dplyr包,通过分组后对目标列计算均值并转换为百分比格式:
# 加载包 library(dplyr) # 计算分组占比并格式化 result <- df.bar %>% group_by(diagnosis) %>% summarise(across(C1:C2, ~ paste0(round(mean(.x) * 100), "%"))) # 查看结果 result
运行后输出:
diagnosis C1 C2 <chr> <chr> <chr> 1 A 66% 33% 2 hg 0% 0% 3 nb 50% 0%
方法二:使用Base R
无需额外加载包,用aggregate函数实现:
# 计算分组占比并格式化 result_base <- aggregate(. ~ diagnosis, data = df.bar, FUN = function(x) paste0(round(mean(x)*100), "%")) # 查看结果 result_base
输出结果与方法一一致。
原理说明
- 对于由0和1组成的列,
mean(x)直接等于1的占比(均值=总和/数量,总和就是1的个数) - 乘以100转换为百分比数值,
round()取整后用paste0()添加百分号完成格式化
内容的提问来源于stack exchange,提问作者bic ton
相关产品推荐
相关产品推荐

