首页 > 解决方案 > 如何将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问题:如何将汇总结果保存到数据集中

标签: 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

推荐阅读