T-тест с номером столбца вместо имени столбца

Я пытаюсь выполнить серию T-тестов с использованием RStatix ​​t_test(), где зависимая переменная одинакова во всех тестах, а переменная группировки изменяется. Я выполняю эти тесты внутри цикла, поэтому я хотел бы выбрать группирующую переменную с номером столбца вместо имени столбца. Я пытался сделать это с помощью colnames(dataframe)[[columnnumber]], но получаю следующую ошибку: не удается извлечь несуществующие столбцы. Как я могу выбрать группирующую переменную с номером столбца вместо имени столбца?

Ниже приведен минимальный воспроизводимый пример с фиктивным фреймом данных; тест работает правильно, когда указано имя группирующей переменной (пол), но не когда вместо него указан номер столбца.

library(tidyverse)
library(rstatix)
dat<-data.frame(gender=rep(c("Male", "Female"), 1000),
              age=rep(c("Young","Young", "Old", "Old"),500),
              tot= round(runif(2000, min=0, max=1),0))

dat %>% t_test(tot ~ gender,detailed=T) ##Works

dat %>% t_test(tot ~ colnames(dat)[[1]],detailed=T) ##Doesn't work


person cholo.trem    schedule 07.03.2021    source источник


Ответы (2)


colnames(dat)[1] - строка. t_test требуется объект формулы, вам нужно преобразовать строку в формулу и передать ее в t_test. Это можно сделать с помощью reformulate или as.formula.

library(rstatix)
dat %>% t_test(reformulate(colnames(dat)[1], 'tot'),detailed=T)

# A tibble: 1 x 15
#  estimate estimate1 estimate2 .y.   group1 group2    n1    n2 statistic
#*    <dbl>     <dbl>     <dbl> <chr> <chr>  <chr>  <int> <int>     <dbl>
#1    0.011     0.505     0.494 tot   Female Male    1000  1000     0.492
# … with 6 more variables: p <dbl>, df <dbl>, conf.low <dbl>,
#   conf.high <dbl>, method <chr>, alternative <chr>
person Ronak Shah    schedule 07.03.2021

Если мы хотим использовать tidyverse способ построения, сделайте это с expr

library(rstatix)
dat %>%
     t_test(formula = eval(rlang::expr(tot ~ !! rlang::sym(names(.)[1]))),
                detailed = TRUE)
# A tibble: 1 x 15
#  estimate estimate1 estimate2 .y.   group1 group2    n1    n2 statistic     p    df conf.low conf.high method alternative
#*    <dbl>     <dbl>     <dbl> <chr> <chr>  <chr>  <int> <int>     <dbl> <dbl> <dbl>    <dbl>     <dbl> <chr>  <chr>      
#1    -0.02     0.497     0.517 tot   Female Male    1000  1000    -0.894 0.371 1998.  -0.0639    0.0239 T-test two.sided

ПРИМЕЧАНИЕ: значения отличаются, поскольку данные были построены без set.seed (wrt rnorm)

person akrun    schedule 07.03.2021