我可以使用分组来总结均值
t(mtcars %>%
group_by(gear) %>%
dplyr::summarize(Mean_Mpg = mean(mpg, na.rm=TRUE),
StdD_Mpg = sd(mpg, na.rm=TRUE)
))
gear 3 4 5
Mean_Mpg 16.106667 24.533333 21.380000
StdD_Mpg 3.371618 5.276764 6.658979
我知道summary(aov(gear ~ mpg , mtcars))
将输出ANOVA测试(包括F统计量)的结果。
Df Sum Sq Mean Sq F value Pr(>F)
mpg 1 3.893 3.893 8.995 0.0054 **
Residuals 30 12.982 0.433
chisq.test(table(mtcars$gear,mtcars$carb))
也将输出卡方检验的结果。
Pearson's Chi-squared test
X-squared = 16.518, df = 10, p-value = 0.08573
我要做的是产生如下所示的输出,其中我将平均值,标准差和方差分析(X方检验统计量)的F统计量值相结合。
gear 3 4 5 Test-Statistic Test
Mpg (Mean) 16.106667 24.533333 21.380000 8.995 ANOVA
(StdD) 3.371618 5.276764 6.658979
Carb(N) 16.518 Chi.Square
3 4 0
4 4 2
3 0 0
5 4 1
0 0 1
0 0 1
我不确定如何将平均值,标准偏差,F统计量,Chiq.Square统计量值等组合在一起来构成这样的表格。我欢迎社区提供任何格式化此类结果的帮助。
答案 0 :(得分:0)
一种选择是考虑所有想要的结果,以及如何操纵它们以具有相同的结构。然后,以bind_rows()
为例,将所有结果收集在同一张表中。
函数group_by()
和summarise()
能够计算多个变量的均值(以及其他)(结果是一个data.frame),而函数apply()
允许应用一个相同的功能,或者将功能(例如summary(aov(...))
)组合到多个变量。第二个结果是一个向量。
library(tidyverse)
# mean (± sd) of x per group
mtcars %>%
group_by(gear) %>%
summarise_at(
vars(mpg, carb),
funs(paste0(round(mean(.), 2), '(±', round(sd(.) / sqrt(n()), 1), ')'))
) %>%
mutate(gear = as.character(gear)) %>%
# add ANOVA: gear ~ x
bind_rows(
c(gear = 'ANOVA',
apply(mtcars %>% select(mpg, carb), 2,
function(x) summary(aov(mtcars$gear ~ x))[[1]]$`F value`[1] %>% round(3) %>% as.character()
))
) %>%
# add Chi-Square: gear ~ x
bind_rows(
c(gear = 'CHI-SQUARE',
apply(mtcars %>% select(mpg, carb), 2,
function(x) chisq.test(table(mtcars$gear, x))$statistic %>% round(3) %>% as.character()
))
)
# # A tibble: 5 x 3
# gear mpg carb
# <chr> <chr> <chr>
# 1 3 16.11(±0.9) 2.67(±0.3)
# 2 4 24.53(±1.5) 2.33(±0.4)
# 3 5 21.38(±3) 4.4(±1.2)
# 4 ANOVA 8.995 2.436
# 5 CHI-SQUARE 54.667 16.518