如何基于iris数据集生成含均值±标准差的分组tibble?
解决步骤
你的现有代码已经完成了分组计算均值、标准差,并且把数据整理成了长格式,接下来只需要把均值和标准差合并成带“±”的列,再按需调整格式即可:
- 合并均值与标准差:用
mutate函数把Mean和dev.st拼接成新列,可设置小数位数让结果更规整。 - 可选:移除冗余列:如果不需要单独的均值、标准差列,用
select删掉即可。 - 可选:转宽格式:若希望每个变量作为一列(而非行),用
pivot_wider调整结构。
完整代码示例
library(tidyverse) iris %>% group_by(Species) %>% summarise(across(everything(), list(Mean = mean, dev.st = sd))) %>% pivot_longer(cols = -Species, names_to = c(".value", "variable"), names_sep = "_") %>% # 合并均值和标准差,保留2位小数 mutate(summary_stats = paste0(round(Mean, 2), " ± ", round(dev.st, 2))) %>% # 移除单独的均值和标准差列(可选操作) select(-Mean, -dev.st) %>% # 可选:转成宽格式,每个变量作为一列 pivot_wider(names_from = variable, values_from = summary_stats)
代码说明
round(Mean, 2):将均值保留2位小数,可根据需求调整位数。paste0:实现字符串无缝拼接,也可以用stringr::str_glue("{round(Mean,2)} ± {round(dev.st,2)}"),写法更直观。pivot_wider:如果需要宽格式(每行对应一个物种,每列对应一个变量的统计值)就添加这一步,否则保留长格式即可。
宽格式输出示例
| Species | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width |
|---|---|---|---|---|
| setosa | 5.01 ± 0.35 | 3.43 ± 0.38 | 1.46 ± 0.17 | 0.25 ± 0.11 |
| versicolor | 5.94 ± 0.52 | 2.77 ± 0.31 | 4.26 ± 0.47 | 1.33 ± 0.20 |
| virginica | 6.59 ± 0.64 | 2.97 ± 0.32 | 5.55 ± 0.55 | 2.03 ± 0.27 |
内容的提问来源于stack exchange,提问作者Manuel Tiburtini
相关产品推荐
相关产品推荐

