Как выполнить много тестов Манна-Уитни условно на основе значения в столбце в R? - PullRequest
2 голосов
/ 23 января 2020

Я хочу создать функцию (или способ выполнить тест за один - go), который выполняет тест Манна Уитни. Я хочу проанализировать значения logSG между двумя различными CC условиями в одно и то же время. Поэтому для следующего кадра данных мне нужно 3 p-значения, которые соответствуют каждому времени.

Мой примерный кадр данных:

structure(list(Time = c("30", "30", "30", "30", "30", "30", "30", 
"30", "30", "30", "30", "30", "30", "60", "60", "60", "60", "60", 
"60", "60", "60", "60", "60", "90", "90", "90", "90", "90", "90", 
"90", "90", "90"), CC = c("Scramble", "Scramble", "Scramble", 
"Scramble", "Scramble", "Scramble", "Scramble", "Scramble", "KD", 
"KD", "KD", "KD", "KD", "Scramble", "Scramble", "Scramble", "Scramble", 
"Scramble", "KD", "KD", "KD", "KD", "KD", "Scramble", "Scramble", 
"Scramble", "Scramble", "KD", "KD", "KD", "KD", "KD"), logSG = c(0, 
6.29469069760774, 6.97548510669835, 0, 0, 5.6529880324294, 0, 
0, 0, 0, 0, 5.84818081635987, 0, 6.33960454566506, 0.410736902037262, 
0, 0, 0, 0, 0.0294484401648161, 0, 1.03061195077248, -1.30321174424293, 
-1.25902114646857, 0, 0, 0.787059500696643, 3.54611686297603, 
0, 0, -0.297732408305282, 0)), row.names = c(NA, -32L), class = c("data.table", 
"data.frame"), .internal.selfref = <pointer: 0x7f9b120204e0>)

Я пробовал следующее для каждого момента времени:

e <- result[result$Time == 30,]
wilcox.test(SG ~ CC, data=e)

Это неуклюже и неэффективно.

Или у меня проблемы с тем, чтобы заставить это работать:

t <- result %>% group_by(Time) %>% do(te=wilcox.test(logSG ~ CC))

Если возможно, я бы хотел узнать, как это сделать, используя dplyr и m/s/apply.

Ссылки: ссылка Ссылка

1 Ответ

2 голосов
/ 23 января 2020

Если мы используем do, укажите data

library(dplyr)
result %>%
     group_by(Time) %>%
     do(te=wilcox.test(logSG ~ CC, data = .)) 

Или используйте map на nest ed набор данных

library(purrr)
result %>%
   group_by(Time) %>%
   nest %>%
   mutate(te = map(data, ~ wilcox.test(logSG ~ CC, data = .x) ))
...