r - 如何将summary()的结果变成好看的数据表
问题描述
使用 R 的 summary(),我想创建一个包含多个变量的均值、std、n、min 和 max 的表。我将使用 mtcars 作为数据集(R 的默认数据集)。如果只有一个变量,则效果很好:
as.data.frame(t(unclass(summary(mtcars$disp))))
结果:
Min. 1st Qu. Median Mean 3rd Qu. Max.
1 71.1 120.825 196.3 230.7219 326 472
如果不止一个,那就不好用了。我得到与上面相同的结果(仅显示 mtcars$disp 的结果)。
as.data.frame(t(unclass(summary(mtcars$disp,mtcars$hp,mtcars$drat))))
结果(同上):Min. 第一曲。中位数平均第三曲。最大限度。1 71.1 120.825 196.3 230.7219 326 472
理想的结果应该是这样的。
Min. 1st Qu. Median Mean 3rd Qu. Max.
71.1 120.825 196.3 230.7219 326 472
52 96.5 123 146.6875 180 335
2.76 3.08 3.695 3.596563 3.92 4.93
我也想要变量的名称:
Name Min. 1st Qu. Median Mean 3rd Qu. Max.
disp 71.1 120.825 196.3 230.7219 326 472
hp 52 96.5 123 146.6875 180 335
drat 2.76 3.08 3.695 3.596563 3.92 4.93
你能建议吗?同样在最后一个代码中,我必须多次重复 $mtcars。有没有办法避免这种情况?
谢谢你。
我在这里问了一个类似的问题,但是建议的代码变得非常复杂。如果可能的话,我想坚持使用 summary() 。 R问题:如何将汇总结果保存到数据集中
解决方案
您可以sapply
越过这些列并获取summary
每个
cols <- c("disp", "hp", "drat")
t(sapply(mtcars[cols], summary))
# Min. 1st Qu. Median Mean 3rd Qu. Max.
#disp 71.10 120.825 196.300 230.721875 326.00 472.00
#hp 52.00 96.500 123.000 146.687500 180.00 335.00
#drat 2.76 3.080 3.695 3.596563 3.92 4.93
如果您还需要单独列中的名称
summary_df <- data.frame(t(sapply(mtcars[cols], summary)), check.names = FALSE)
summary_df$Name <- rownames(summary_df)
rownames(summary_df) <- NULL
summary_df
# Min. 1st Qu. Median Mean 3rd Qu. Max. Name
#1 71.10 120.825 196.300 230.721875 326.00 472.00 disp
#2 52.00 96.500 123.000 146.687500 180.00 335.00 hp
#3 2.76 3.080 3.695 3.596563 3.92 4.93 drat
要添加一些额外的统计信息,我们需要创建一个自定义函数
custom_summary <- function(x) {
c(summary(x), length = length(x), nonmissing = sum(!is.na(x)),
sd = sd(x, na.rm = TRUE))
}
t(sapply(mtcars[cols], custom_summary))
# Min. 1st Qu. Median Mean 3rd Qu. Max. length nonmissing sd
#disp 71.10 120.825 196.300 230.721875 326.00 472.00 32 32 123.9386938
#hp 52.00 96.500 123.000 146.687500 180.00 335.00 32 32 68.5628685
#drat 2.76 3.080 3.695 3.596563 3.92 4.93 32 32 0.5346787
推荐阅读
- docker - 如何获取 docker 服务错误
- javascript - 警告:函数组件不能被赋予 refs
- django - 如何从 django 管理面板中删除 user_permissions
- matlab - 如何在matlab中对多个变量中的一组曲线进行切片和存储?
- amazon-web-services - Terraform 'aws_secretsmanager_secret' 传递 arn 错误:模板插值无效
- django - Django 模式选择日期
- bash - 如何记住哪个扩展 ${var%} ${var#} 从哪一端工作?
- java - 春季应用程序与jpa的关联错误
- python - 在以下行 python 中找到一个单词
- node.js - 如何知道哪个斜杠(正斜杠或反斜杠)将用作 Cloud Run Node.js dockerized 环境中的文件夹分隔符?