我有两个 data.frames 看起来像:
DF1
Col1 Col2 Col3 Col4
0.1854 0.1660 0.1997 0.4632
0.1760 0.1336 0.1985 0.4496
0.1737 0.1316 0.1943 0.4446
0.1660 0.1300 0.1896 0.4439
DF2
Col1 Col2 Col3 Col4
0.2456 0.2107 0.2688 0.5079
0.2399 0.1952 0.2356 0.1143
0.2375 0.1947 0.2187 0.0846
0.2368 0.1922 0.2087 0.1247
我想在两个 data.frames 之间执行 wilcox.test,特别是在成对的列之间,以便:
test1: between Col1 of DF1 and Col1 of DF2
test2: between Col2 of DF1 and Col2 of DF2
等等。
我使用了以下脚本:
for (i in 1:length(DF2)){
test <- apply(DF1, 2, function(x) wilcox.test(x, as.numeric(DF2[[i]]), correct=TRUE))
}
不幸的是,此脚本的输出与使用以下脚本执行的相同测试的输出不同:
test1 = wilcox.test(DF1[,1], DF2[,1], correct=FALSE)
test2 = wilcox.test(DF1[,2], DF2[,2], correct=FALSE)
因为在真实的 data.frames 中我有大约 100 列和 200 行(它们在维度上是相等的)我不能逐列进行测试。
在 dput(DF1)
之后:
structure(list(Col1 = c(0.1854, 0.1760, 0.1737, 0.1660,....), class = "data.frame", row.names = c(NA, -100L)))
DF2
相同
最佳答案
这是一个经典的 mapply
案例 - 基本上只是 sapply
的多元版本。我们使用 mapply
依次遍历每个数据帧。首先,创建一些数据:
df1 = data.frame(c1 = runif(10), c2 = runif(10), c3 = runif(10), c4 = runif(10))
df2 = data.frame(c1 = runif(10), c2 = runif(10), c3 = runif(10), c4 = runif(10))
然后使用mapply
l = mapply(wilcox.test, df1, df2, SIMPLIFY=FALSE, correct=FALSE)
这里的变量 l
是一个列表。所以,
wilcox.test(df1[,1], df2[,1], correct=FALSE)
l[[1]]
wilcox.test(df1[,2], df2[,2], correct=FALSE)
l[[2]]
关于r - 列配对统计检验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15341392/