如何将summary()的结果转换为美观的数据表
使用R的summary(),我想创建一个表,其中包含多个变量的means、std、n、min和max。我将使用mtcars作为数据集(R的默认数据集)。如果只有一个变量,则该方法效果良好:如何将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 如果不止一个,它就不能很好地
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