Есть ли в R цикл для анализа между столбцами? - PullRequest
1 голос
/ 02 ноября 2019

У меня есть следующие данные:

df<-read.table(text=" A1 A2 A3 A4 A5 B1 B2 B3 B4 B5
F   M   F   M   F   17  15  14  17  18
M   M   F   M   F   17  15  12  18  14
F   M   F   M   F   16  12  17  18  16
F   M   F   M   F   13  13  15  17  18
F   M   F   M   F   14  15  17  14  14
M   M   F   F   F   18  14  15  17  18
F   M   F   F   F   16  12  15  17  20
M   F   F   F   F   12  12  18  13  17
F   F   F   F   F   14  12  12  19  16
M   F   F   F   F   18  14  13  12  14
F   F   F   F   F   19  15  14  15  18
F   F   F   M   F   14  20  13  15  19
F   F   F   M   M   18  20  19  13  19
M   F   F   M   M   15  15  12  16  19
F   M   M   M   M   18  14  13  18  18
F   M   M   M   M   17  12  12  13  19
F   M   M   F   M   12  12  13  13  16
M   M   M   F   M   14  19  15  20  14
F   M   M   F   M   18  12  12  12  14", h=T)

Я хочу запустить t-тест, используя следующую функцию для групп. Например, A1 с B1:

t.test(B1~A1, data=df)

ggplot(df, aes(x=B1, y=A1)) + 
geom_boxplot()

Теперь я хочу использовать цикл для получения выходных данных для всех данных с использованием функции t-критерия выше, то есть A1 с B1, A2 с B2, A3 с B3,A4 с B4 и A5 с B5 и ... Так что я бы получил 5 выводов из t-тестов.

Спасибо за вашу помощь

1 Ответ

3 голосов
/ 02 ноября 2019

Мы можем использовать Map, чтобы создать формулу между соответствующими столбцами 'A', 'B' в list и применить t.test

Map(function(x, y) t.test(reformulate(x, y), data = df),
           names(df)[1:5], names(df)[6:10])

Формула также можетбыть созданным с paste, и обернуть с formula

Map(function(x,y) t.test(as.formula(paste0(y, "~", x)), 
     data = df), names(df)[1:5], names(df)[6:10])

Если нам нужны коробочные графики

library(purrr)
library(ggplot2)
map2(names(df)[6:10], names(df)[1:5], ~
   ggplot(df, aes(x = !!rlang::sym(.x), y = !!rlang::sym(.y))) + 
               geom_boxplot())
...