R 如何使用我的数据框架(多组/结果,多个定量变量)进行大量t.测试?

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

通过在R中运行多个t.test(根据多个定量变量比较多个组),我想在R中得到如下结果:

我尝试并修改了此处提供的解决方案:

我面临多个问题:

  • (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