Запустите функцию Уилкокса для каждой строки в каждой группе - PullRequest
0 голосов
/ 02 октября 2019

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

df <- data.frame(group = c("A", "B", "C", "D", "E"), 
                 country=c("US","UK"),
                 md = runif(10,0,10), 
                 og = runif(10, 0, 10))

, и я хочу применить функцию wilcox в каждой строке для сравнения md и og в каждой группе и каждой стране.

results <- apply(df,1,function(x){
 df <- data.frame(x)
 wres<-wilcox.test(df$md,df$og)
 df$test<-format(wres$p.value,scientific = F)
 })

Я хочу, чтобы другой столбец состоял из P-значения. но когда я запускаю его, он выдает следующую ошибку:

Error in wilcox.test.default(df$mean_modified, df$mean_original) : 
  'x' must be numeric

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Мы можем использовать mapply, чтобы применить wilcox.test для каждого значения, а затем извлечь p.value из него

df$p.value <- mapply(function(x, y) wilcox.test(x, y)$p.value, df$md, df$og)
1 голос
/ 02 октября 2019

Я пытаюсь выучить apply сам. Кажется, вы хотели сравнить md и og для каждой группы или страны. Есть и другие (лучшие) решения для этого. Вот пример использования apply family для сравнения md и og для каждого country:

results <- sapply(levels(df$country), function(x){
  df <- subset(df, country== x)
  wilcox.test(df$md,df$og)$p.value})
results

. Вы получите что-то вроде:

> results
       UK        US 
0.8412698 0.1507937 
...