R T.test для нескольких порогов в карте-функции - PullRequest
0 голосов
/ 13 марта 2019

Я хочу выполнить t.test для нескольких порогов и нескольких фреймов данных.Вот мой пример кода с пороговыми значениями 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)

Нет. Я хочу запустить t.test для переменных A и B для всех фреймов данных.

Этот кодработает для первого порога 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)

Теперь я получаю желаемый результат: (таблица t.tests для всех фреймов данных для порога 1)

# 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  

Но теперь я хочузапустить t.test автоматически для всех 3 порогов.Как я могу поместить пороги в функцию map_function, чтобы я получил 3 новые таблицы t.tests?(1 таблица для каждого порога)

1 Ответ

1 голос
/ 13 марта 2019

вы можете перебрать пороговые значения внутри функции (на первой карте) и провести уборку также внутри нее, затем вы можете добавить другие переменные, чтобы указать df и threshold

как насчет чего-токак это:

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, .)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...