对每个组中的每一行运行wilcox函数

时间:2019-10-02 04:01:33

标签: r apply

我有一个数据框,如下所示:

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 个答案:

答案 0 :(得分:1)

我正在尝试自己学习apply。您似乎想比较每个组或国家/地区的mdog。还有其他(更好)的解决方案。以下是使用apply族比较每个md的{​​{1}}和og的一种练习:

country

您将获得类似的内容:

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

答案 1 :(得分:1)

我们可以使用mapply为每个值应用wilcox.test,然后从中提取p.value

df$p.value <- mapply(function(x, y) wilcox.test(x, y)$p.value, df$md, df$og)