R 如何使用我的数据框架(多组/结果,多个定量变量)进行大量t.测试?
通过在R中运行多个t.test(根据多个定量变量比较多个组),我想在R中得到如下结果: 我尝试并修改了此处提供的解决方案: 我面临多个问题:R 如何使用我的数据框架(多组/结果,多个定量变量)进行大量t.测试?,r,dplyr,tidyr,R,Dplyr,Tidyr,通过在R中运行多个t.test(根据多个定量变量比较多个组),我想在R中得到如下结果: 我尝试并修改了此处提供的解决方案: 我面临多个问题: (1) 我有两条警告消息,我不知道这两条消息是如何解决的 (2) 如何获得每组/结果的一行 (3) 如何通过组名更改“1”(第二行的第一个字符)(在本例中为“vs”和“am”) (4) 如何将此输出导出为数据帧(如我开始的示例中所示) 非常感谢你的帮助 库(tidyverse) library(tidyverse) vars_to_test
- (1) 我有两条警告消息,我不知道这两条消息是如何解决的
- (2) 如何获得每组/结果的一行
- (3) 如何通过组名更改“1”(第二行的第一个字符)(在本例中为“vs”和“am”)李>
- (4) 如何将此输出导出为数据帧(如我开始的示例中所示)
库(tidyverse)
library(tidyverse)
vars_to_test <- c("disp","hp","drat","wt","qsec")
iv <- c("vs", "am")
expand.grid(vars_to_test, iv, stringsAsFactors = F) %>% # create pairs of variables
rowwise() %>% # for each pair
mutate(p_val = t.test(mtcars[,Var1] ~ mtcars[,Var2])$p.value) %>% # get p value from t.test
spread(Var1, p_val) # reshape output
# # A tibble: 2 x 6
# Var2 disp drat hp qsec wt
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 am 0.000230 0.00000527 0.221 0.209 0.00000627
# 2 vs 0.00000248 0.0129 0.00000182 0.00000352 0.000728
每对的vars_至_测试%#
变异(p_val=t.test(mtcars[,Var1]~mtcars[,Var2])$p.value)%>%#从t.test中获取p值
扩展(Var1,p#val)#重塑输出
##A tibble:2 x 6
#Var2显示图纸hp qsec wt
#
#1 am 0.000230 0.0000527 0.221 0.209 0.00000627
#2对0.00000248 0.0129 0.00000182 0.00000352 0.000728
使用map\u-dfr对iv
中的每个变量应用总结
vars_to_test <- c("disp","hp","drat","wt","qsec")
iv <- c("vs", "am")
#map_dfr use these names as id
names(iv) <- iv
library(dplyr)
library(purrr)
map_dfr(iv, function(x) mtcars %>%
summarise_at(vars_to_test,
list(
#!! and parse_expr will transfer the string "output of sprintf" into epression
~!!(parse_expr(sprintf("stats::t.test(.[%s == 0], .[%s == 1])$p.value", x, x)))
)), .id = "group")
group disp hp drat wt qsec
1 vs 2.476526e-06 1.819806e-06 1.285342e-02 7.281397e-04 3.522404e-06
2 am 2.300413e-04 2.209796e-01 5.266742e-06 6.272020e-06 2.093498e-01
vars\u-to\u测试
Please use summarise_if(), summarise_at(), or summarise_all() instead:
- To map `funs` over all variables, use summarise_all()
- To map `funs` over a selection of variables, use summarise_at()
This warning is displayed once per session.
2: funs_() is deprecated.
Please use list() instead
library(tidyverse)
vars_to_test <- c("disp","hp","drat","wt","qsec")
iv <- c("vs", "am")
expand.grid(vars_to_test, iv, stringsAsFactors = F) %>% # create pairs of variables
rowwise() %>% # for each pair
mutate(p_val = t.test(mtcars[,Var1] ~ mtcars[,Var2])$p.value) %>% # get p value from t.test
spread(Var1, p_val) # reshape output
# # A tibble: 2 x 6
# Var2 disp drat hp qsec wt
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 am 0.000230 0.00000527 0.221 0.209 0.00000627
# 2 vs 0.00000248 0.0129 0.00000182 0.00000352 0.000728
vars_to_test <- c("disp","hp","drat","wt","qsec")
iv <- c("vs", "am")
#map_dfr use these names as id
names(iv) <- iv
library(dplyr)
library(purrr)
map_dfr(iv, function(x) mtcars %>%
summarise_at(vars_to_test,
list(
#!! and parse_expr will transfer the string "output of sprintf" into epression
~!!(parse_expr(sprintf("stats::t.test(.[%s == 0], .[%s == 1])$p.value", x, x)))
)), .id = "group")
group disp hp drat wt qsec
1 vs 2.476526e-06 1.819806e-06 1.285342e-02 7.281397e-04 3.522404e-06
2 am 2.300413e-04 2.209796e-01 5.266742e-06 6.272020e-06 2.093498e-01