如何使用dplyr
多个变量创建简单的摘要统计?使用该summarise_each
函数似乎是要走的路,但是,当将多个函数应用于多个列时,结果是一个宽的,难以读取的数据帧.
使用dplyr
结合tidyr
来重塑最终结果.
library(dplyr) library(tidyr) df <- tbl_df(mtcars) df.sum <- df %>% select(mpg, cyl, vs, am, gear, carb) %>% # select variables to summarise summarise_each(funs(min = min, q25 = quantile(., 0.25), median = median, q75 = quantile(., 0.75), max = max, mean = mean, sd = sd)) # the result is a wide data frame > dim(df.sum) [1] 1 42 # reshape it using tidyr functions df.stats.tidy <- df.sum %>% gather(stat, val) %>% separate(stat, into = c("var", "stat"), sep = "_") %>% spread(stat, val) %>% select(var, min, q25, median, q75, max, mean, sd) # reorder columns > print(df.stats.tidy) var min q25 median q75 max mean sd 1 am 0.0 0.000 0.0 1.0 1.0 0.40625 0.4989909 2 carb 1.0 2.000 2.0 4.0 8.0 2.81250 1.6152000 3 cyl 4.0 4.000 6.0 8.0 8.0 6.18750 1.7859216 4 gear 3.0 3.000 4.0 4.0 5.0 3.68750 0.7378041 5 mpg 10.4 15.425 19.2 22.8 33.9 20.09062 6.0269481 6 vs 0.0 0.000 0.0 1.0 1.0 0.43750 0.5040161
我喜欢paljenczy的想法,即只使用dplyr/tidy并在格式化之前在data.frame/tibble中获取表.但是我遇到了健壮性问题:因为它依赖于解析变量名称,所以它在名称中带有下划线的列上会被阻塞.在尝试在dplyr框架中修复它之后,它似乎总是有些脆弱,因为它依赖于字符串解析.
所以最后我决定使用psych :: describe()这是一个专门为这个东西设计的函数.它不完全是任意函数,但几乎任何人都想要做的事情.完整的示例复制下面的解决方案(将描述与一些整齐的东西结合起来得到我正在寻找的确切元素):
library(psych) library(tidyverse) # Create an extended version with a bunch of stats d.summary.extended <- mtcars %>% select(mpg, cyl, vs, am, gear, carb) %>% psych::describe(quant=c(.25,.75)) %>% as_tibble(rownames="rowname") %>% print() # Select stats for comparison with other solutions d.summary <- d.summary.extended %>% select(var=rowname, min, q25=Q0.25, median, q75=Q0.75, max, mean, sd) %>% print()
如果你想创建一个发表的摘要表(不是为了进一步的计算),你可能想看看优秀的观星者包.
df <- data.frame(mtcars)
cols <- c('mpg', 'cyl', 'vs', 'am', 'gear', 'carb')
stargazer(
df[, cols], type = "text",
summary.stat = c("min", "p25", "median", "p75", "max", "median", "sd")
)
================================================================
Statistic Min Pctl(25) Median Pctl(75) Max Median St. Dev.
----------------------------------------------------------------
mpg 10.400 15.430 19.200 22.800 33.900 19.200 6.027
cyl 4 4 6 8 8 6 1.786
vs 0 0 0 1 1 0 0.504
am 0 0 0 1 1 0 0.499
gear 3 3 4 4 5 4 0.738
carb 1 2 2 4 8 2 1.615
----------------------------------------------------------------
您也可以将类型更改为"latex"和"html",并将其保存到文件中,并指定给出"out"参数的文件.