我尝试对数据帧的许多列执行独立的 t 检验。例如,我创建了一个数据框
set seed(333)
a <- rnorm(20, 10, 1)
b <- rnorm(20, 15, 2)
c <- rnorm(20, 20, 3)
grp <- rep(c('m', 'y'),10)
test_data <- data.frame(a, b, c, grp)
Run Code Online (Sandbox Code Playgroud)
为了运行测试,我使用了 with(df, t.test(y ~ group))
with(test_data, t.test(a ~ grp))
with(test_data, t.test(b ~ grp))
with(test_data, t.test(c ~ grp))
Run Code Online (Sandbox Code Playgroud)
我想要这样的输出
mean in group m mean in group y p-value
9.747412 9.878820 0.6944
15.12936 16.49533 0.07798
20.39531 20.20168 0.9027
Run Code Online (Sandbox Code Playgroud)
我想知道如何使用 1. for loop
2. apply()
3.来实现结果。也许dplyr
我lm()使用purrr:map()函数运行数据集的每一列,其中一列作为因变量。
除此之外,结果几乎是完美的 - 我想.x用我运行的变量替换结果lm()。
post R purrr map show column names in output是相关的,但我想避免创建一个函数。
下面是使用 mtcars 数据集的代码。我知道,例如,.x第一个输出是指$mpg. 我不确定是否setNames()会奏效。
library(tidyverse)
library(broom)
mod3 <- map(mtcars, ~ lm(mpg ~ .x, data = mtcars)) %>%
map(~tidy(.x))
#> Warning in summary.lm(x): essentially perfect fit: summary may be
#> unreliable
mod3
#> $mpg
#> # A tibble: 2 x 5
#> term estimate std.error statistic p.value
#> <chr> <dbl> <dbl> <dbl> <dbl> …Run Code Online (Sandbox Code Playgroud)