Мы можем split
в list
с split.default
, а затем l oop над list
с lapply
, извлечь столбец с помощью анонимного вызова функции и сделать t.test
out <- lapply(split.default(D, sub("_.*", "", names(D))),
function(x) t.test(x[[1]], x[[2]]))
sub
будет соответствовать шаблону _
, за которым следуют символы (.*
) из имен столбцов 'D', и заменить на пробел (""
), чтобы в list
, мы получаем каждый попарно столбцы ('Q1_a', 'Q1_b', ..., 'Q8_a', 'Q8_b')
В случае, если мы используем tidyverse
, можно повернуть в «длинный» формат и затем примените summarise_at
library(dplyr)
library(tidyr)
D %>%
pivot_longer(everything(), names_to = c(".value", "grp"),
names_sep = "_") %>%
summarise_at(vars(-grp), ~ list(t.test(.[grp == 'a'], .[grp == 'b'])))