将 wilcox.test 应用于数据框中的所有成对列

Apply wilcox.test to all paired columns in a dataframe

为了我的M.Sc。项目我尝试按中位数对(由用户)给定数据框的所有列进行排序,按特定模式(稍后提到)在列上应用 wilcox.test,然后将每列的值绘制在盒须中 -剧情.

排序和绘图工作得很好,但我很难找到一种方法将 wilcox.test 应用于以下模式中的数据框:

wilcox.test(i, j, paired=TRUE)

i=1j=2 并且都递增直到 j=ncol(dataframe)。所以我想 运行 参数为第 1 列和第 2 列的函数,然后是第 2 列和第 3 列等等,直到 j 是数据帧的最后一列。

我也想将所有 p 值存储在一个数据框中,一行(包含 p 值)并且每一行都有两列的名称,它们是 wilcox.test 中的参数,因为我不仅想绘制所有列(每个列代表一个“解决方案”),而且我也想在控制台中打印每个测试的 p 值(类似于:“Wilcoxon-test with 'Solution1''Solution2' 导致 p 值:'p-value from wilcox.test of Solution1 and Solution2',这意味着解决方案 are/aren 没有明显不同”)。

关于这个问题,我试图调整其他帖子中的一些代码,但没有任何效果。不幸的是,我在 R 方面也非常缺乏经验,所以我希望我上面写的也不是胡说八道。 我也尝试以 java 方式使用 for 循环和增量遍历数据帧的列,因为这是我教过的唯一编程语言,但这根本不起作用(真令人惊讶).

我的代码基于具有非常不同值的数据框创建的图:

感谢你们给我的任何建议,非常感谢!

似乎是 matrixTests 包的工作。这是使用 iris 数据集的演示:

library(matrixTests)
col_wilcoxon_twosample(iris[,1:3], iris[,2:4])

             obs.x obs.y obs.tot statistic       pvalue alternative location.null exact corrected
Sepal.Length   150   150     300   22497.5 9.812123e-51   two.sided             0 FALSE      TRUE
Sepal.Width    150   150     300    7793.5 4.151103e-06   two.sided             0 FALSE      TRUE
Petal.Length   150   150     300   19348.5 3.735718e-27   two.sided             0 FALSE      TRUE

返回的结果匹配 wilcox.test() 每对完成的结果。例如,第一列与第二列:

w <- wilcox.test(iris[,1], iris[,2])

w$p.value
[1] 9.812123e-51