如何将summary()的结果转换为美观的数据表

如何将summary()的结果转换为美观的数据表,r,R,使用R的summary(),我想创建一个表,其中包含多个变量的means、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 如果不止一个,它就不能很好地

使用R的summary(),我想创建一个表,其中包含多个变量的means、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显示的结果)

结果(同上): 最小第一个曲中位数平均第三个曲最大值。 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()。

您可以
在列上搜索
,并获得每个列的
摘要

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

cols您可以
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

cols您可以使用
dplyr
summary()
,这将输出一个整洁的tibble/data.frame,并且您可以轻松指定所需的摘要统计信息

mtcars%%>%选择(显示、hp、drat)%%>%
聚集(k,v)%%>%group_by(k)%%>%
总结(最小值=最小值(v),中位数=中位数(v),平均值=平均值(v),最大值=最大值(v),n=n()
#一个tibble:3x6
k最小中值平均最大n
1 disp 71.1 196。231472       32
2德拉特2.76 3.70 3.60 4.93 32
3 hp 52 123 147。335       32

您可以使用
dplyr
summary()
,这将输出一个整洁的tibble/data.frame,并且您可以轻松指定所需的摘要统计信息

mtcars%%>%选择(显示、hp、drat)%%>%
聚集(k,v)%%>%group_by(k)%%>%
总结(最小值=最小值(v),中位数=中位数(v),平均值=平均值(v),最大值=最大值(v),n=n()
#一个tibble:3x6
k最小中值平均最大n
1 disp 71.1 196。231472       32
2德拉特2.76 3.70 3.60 4.93 32
3 hp 52 123 147。335       32

有人知道扫帚包是否包含此内容吗?有人知道扫帚包是否包含此内容吗?看起来很棒!我喜欢这种方法,因为它非常简单。我想将案例数量添加到表中。如何控制可以添加到summary()结果中的内容?谢谢大家!@Kaz您希望向输出中添加哪些其他案例<代码>摘要
仅返回上面答案中显示的值。如果在这种情况下需要添加其他内容,则需要为此编写一个自定义函数。我想添加“行数”。数据集mtcars包含32个案例,因此结果应该是n=32。@Kaz将答案更新为包含
n
。这看起来很棒!我喜欢这种方法,因为它非常简单。我想将案例数量添加到表中。如何控制可以添加到summary()结果中的内容?谢谢大家!@Kaz您希望向输出中添加哪些其他案例<代码>摘要
仅返回上面答案中显示的值。如果在这种情况下需要添加其他内容,则需要为此编写一个自定义函数。我想添加“行数”。数据集mtcars包含32个案例,因此结果应该是n=32。@Kaz更新了答案以包含
n
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