如何统计R语言中字符型多值treatment列的各处理数量与占比?
解决方法
可以用tidyverse工具链中的separate_rows()函数先拆分多值行,再进行统计,具体步骤如下:
- 加载所需包
library(tidyverse)
- 拆分多值行并统计
treatment <- c("1", "1", "2", "5", "1,2", "2,5", "1,2,5", "3") df <- data.frame(treatment) result <- df %>% # 按逗号拆分treatment列,将多值行展开为单行单值 separate_rows(treatment, sep = ",") %>% # 按处理分组 group_by(treatment) %>% # 统计每个处理的数量 summarise(number = n()) %>% # 计算百分比,替换小数点为逗号,保留一位小数 mutate(percent = str_replace(round(100 * number / nrow(df), 1), "\\.", ",")) # 输出结果 print(result, row.names = FALSE)
运行后输出结果:
treatment number percent 1 4 50 2 4 50 3 1 12,5 5 3 37,5
关键步骤说明
separate_rows():将包含多个值的字符列按指定分隔符(这里是逗号)拆分,把原来的一行拆成多行,每个值单独占一行,这是解决多值行统计问题的核心。- 后续的
group_by()和summarise()就可以正常统计每个处理的出现次数,最后通过mutate()计算百分比并调整格式,匹配你需要的逗号作为小数点分隔符的样式。
内容的提问来源于stack exchange,提问作者RvS
相关产品推荐
相关产品推荐

