r - 列配对统计检验

标签 r dataframe

我有两个 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/

相关文章:

r - 如何从文件路径字符串中提取日期,其中还包括格式为 2020.04.12.10.30.10 的时间?

r - 如何使用R检查变量是否分类?

python - 如何创建一个仅选择 Pandas 中值大于 avg +/* 标准差的行的数据框?

r - 连接两列的因子水平

pandas - 如何在 Pandas 中按不同 DF 的日期时间范围进行分组

r - 使用 mlogit R 函数时出错 : the two indexes don't define unique observations

r - 如何从数组R中的某个数字开始?

r - 如何将数据框的两列与缺失数据结合起来?

python - 如何在pandas groupby中获得最少的值出现次数

r - 将 abline 添加到图例