首页 > 解决方案 > R T.test 映射函数中的多个阈值

问题描述

我想对多个阈值和多个数据帧执行 t.tests。这是我的示例代码,阈值为 1、2 和 3:

df1 <- tibble(
var1A= rnorm(1:10) +1,
var1B= rnorm(1:10) +1,
var2A= rnorm(1:10) +2,
var2B= rnorm(1:10) +2,
var3A= rnorm(1:10) +3,
var3B= rnorm(1:10) +3)


df2 <- tibble(
var1A= rnorm(1:10) +1,
var1B= rnorm(1:10) +1,
var2A= rnorm(1:10) +2,
var2B= rnorm(1:10) +2,
var3A= rnorm(1:10) +3,
var3B= rnorm(1:10) +3)


df3 <- tibble(
var1A= rnorm(1:10) +1,
var1B= rnorm(1:10) +1,
var2A= rnorm(1:10) +2,
var2B= rnorm(1:10) +2,
var3A= rnorm(1:10) +3,
var3B= rnorm(1:10) +3)

不,我想为所有数据帧的变量 A 和 B 运行 t.test。

此代码适用于第一个阈值 1:

list_dfs = c('df1','df2','df3')

map(mget(list_dfs),
function(x)
{t.test(x%>%pull(paste0("var",1,"A")), x%>%pull(paste0("var",1,"B")))}
)%>%
map_df(tidy)%>% add_column(.before = 'estimate',df = list_dfs)

现在我得到了我想要的输出:(阈值 1 的所有数据帧的 t.tests 表)

# A tibble: 3 x 11
df    estimate estimate1 estimate2 statistic p.value parameter conf.low conf.high method   alternative
<chr>    <dbl>     <dbl>     <dbl>     <dbl>   <dbl>     <dbl>    <dbl>     <dbl> <chr>    <chr>      
1 df1     -0.371     0.534     0.906    -0.874   0.395      16.0   -1.27      0.529 Welch T~ two.sided  
2 df2      0.500     1.49      0.985     1.01    0.326      17.7   -0.542     1.54  Welch T~ two.sided  
3 df3     -0.363     1.13      1.49     -0.952   0.354      18.0   -1.16      0.438 Welch T~ two.sided  

但现在我想为所有 3 个阈值自动运行 t.test。如何将阈值放入 map_function,以便获得 3 个新的 t.test 表?(每个阈值 1 个表格)

标签: r

解决方案


您可以遍历函数内的阈值(在第一张地图中)并在其中进行整理,然后您可以添加其他变量来指示dfthreshold

像这样的东西怎么样:

list_dfs = c('df1','df2','df3')
thresholds = c(1, 2, 3)

map(list_dfs,
    function(df_name){
      x <- get(df_name)
      lapply(threshold, function(i){
        t.test(x %>%
                 pull(paste0("var",i,"A")), 
               x %>% 
                 pull(paste0("var",i,"B")))
      }) %>% 
        map_df(broom::tidy) %>% 
        add_column(.before = 'estimate',
                   df = df_name, 
                   threshold = thresholds)
    }) %>% 
  do.call(rbind, .)

推荐阅读