【问题标题】:Run a wilcox function for each row in each group为每组中的每一行运行一个 wilcox 函数
【发布时间】:2019-10-03 10:58:39
【问题描述】:

我有一个如下的数据框:

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

【问题讨论】:

  • 要将它应用于您可以执行的每一行mapply(function(x, y) wilcox.test(x, y)$p.value, df$md, df$og),但这是您想要的吗?
  • 如何在你提到的函数中得到一个新的列名p.value
  • 我已经使用以下方法重命名它,但你有更好的选择:df1

标签: r apply


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我正在尝试自己学习apply。您似乎想比较每个组或国家/地区的 mdog。还有其他(更好的)解决方案。这是一个使用apply family 比较mdogcountry 的练习:

    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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 2014-03-05
      • 2014-12-06
      相关资源
      最近更新 更多