问题描述
我有一个数据集,我需要创建一个简单的表,其中包含所有变量(列)的观察值,均值和标准差。我找不到仅所需的3个摘要统计信息的方法。我尝试过的所有内容都会不断地给我最小,最大,中位数,第一和第三四分位数等。表格应该看起来像这样(带有标题):
Table 1: Table Title
_______________________________________
Variables Observations Mean Std.Dev
_______________________________________
Age 30 24 2
... . . .
... . . .
_______________________________________
summary ()
不起作用,因为它提供了太多其他摘要统计信息。我已经做到了:
sapply(dataset,function(x) list(means=mean(x,na.rm=TRUE),sds=sd(x,na.rm=TRUE)))
但是如何从中形成表格呢?还有比使用“ sapply”更好的方法吗?
解决方法
sapply
确实返回了所需的值,但是结构不正确。
以mtcars
数据为例:
#Get the required statistics and convert the data into dataframe
summ_data <- data.frame(t(sapply(mtcars,function(x)
list(means = mean(x,na.rm=TRUE),sds = sd(x,na.rm=TRUE)))))
#Change rownames to new column
summ_data$variables <- rownames(summ_data)
#Remove rownames
rownames(summ_data) <- NULL
#Make variable column as 1st column
cbind(summ_data[ncol(summ_data)],summ_data[-ncol(summ_data)])
另一种方法是使用dplyr
函数:
library(dplyr)
mtcars %>%
summarise(across(.fns = list(means = mean,sds = sd),.names = '{col}_{fn}')) %>%
tidyr::pivot_longer(cols = everything(),names_to = c('variable','.value'),names_sep = '_')
# A tibble: 11 x 3
# variable means sds
# <chr> <dbl> <dbl>
# 1 mpg 20.1 6.03
# 2 cyl 6.19 1.79
# 3 disp 231. 124.
# 4 hp 147. 68.6
# 5 drat 3.60 0.535
# 6 wt 3.22 0.978
# 7 qsec 17.8 1.79
# 8 vs 0.438 0.504
# 9 am 0.406 0.499
#10 gear 3.69 0.738
#11 carb 2.81 1.62