我有两个数据帧:
D9 <- as.data.frame(DF$As,DF$Cd,DF$Cu,DF$Cr,DF$Ni,DF$Pb,DF$Zn)
D10 <- as.data.frame(DO$As,DO$Cd,DO$Cu,DO$Cr,DO$Ni,DO$Pb,DO$Zn)
并希望对每列(DF $ As,DO $ As)等应用wilcox测试。 我尝试了以下代码:
lapply(ncol(D9), function(i) {wilcox.test((D9[,i]),(D10[,i]))})
输出结果为:
[[1]]
Wilcoxon rank sum test
data: (D9[, i]) and (D10[, i])
W = 107, p-value = 0.9834
alternative hypothesis: true location shift is not equal to 0
所以我的问题是 - 我做错了什么?任何帮助表示赞赏。
先谢谢。
答案 0 :(得分:2)
我们有两个不同的数据框 d1 &amp; d N 分别对 X 变量和 N 观察 Y 变量进行观察。
为了在这两个不同数据帧的每一列之间找到Wilcoxon-Matt-Whitney检验 d1 &amp;的 D2 强>:
1。阅读数据:
d1 <- data.frame(read.table("data1", header = TRUE, stringsAsFactors = FALSE, sep = ""))
d2 <- data.frame(read.table("data2", header = TRUE, stringsAsFactors = FALSE, sep = ""))
假设 d1 中的列数大于 d2
中的列数length(colnames(d1)) >= length(colnames(d2))
2. 声明矩阵存储p值
pvalue <- matrix(nrow = length(colnames(d2)), ncol = (length(colnames(d1)))
3. 现在,对于 d2 $ 1 的每一栏进行Wilcoxon-Matt-Whitney测试, d1 $ 1,d1 $ 2,d1 $ 3,... < / strong>等等
for(i in 1:length(colnames(d2))){
for(j in 1:length(colnames(d1))){
pvalue[i,j]<-wilcox.test(d2[,i], d1[,j], paired=TRUE)$p.value
colnames(pvalue) <- colnames(d1)
rownames(pvalue) <- colnames(d2)} }
注意:如果我们想在单个数据帧上执行Wilcoxon-Matt-Whitney测试以找到一列与相同数据帧的另一列之间的关系,则此方法也可以正常工作。
d3 <- data.frame(read.table("data3", header = TRUE, stringsAsFactors = FALSE, sep = ""))
pvalue <- matrix(nrow = length(colnames(d3)), ncol = (length(colnames(d3)))
现在为Wilcoxon-Matt-Whitney测试每列 d3 $ 1 d3 $ 1,d3 $ 2,d3 $ 3,... 等等
for(i in 1:length(colnames(d3))){
for(j in 1:length(colnames(d3))){
pvalue[i,j]<-wilcox.test(d3[,i], d3[,j], paired=TRUE)$p.value
colnames(pvalue) <- colnames(d3)
rownames(pvalue) <- colnames(d3)} }
答案 1 :(得分:1)
请注意,ncol(D9)
只会返回一个数字,因此lapply
只会迭代该单个数字。使用1:ncol(D9)
从第一列开始(或使用seq.int(ncol(D9))
。查看lapply(9, print)
和lapply(1:9, print)
之间的差异
备选方案,您可以直接使用
映射列Map(wilcox.test, D9, D10)
因为data.frames实际上只是列表。
答案 2 :(得分:0)
您还可以通过循环获得迭代打印输出
for(i in 1:ncol(D9)){
summary(wilcox.text(D9[,i],D10[,i]))
}
答案 3 :(得分:0)
这是使用软件包的替代方法,在虹膜的第1-2列和第3-4列之间进行wilcox测试。
library(matrixTests)
col_wilcoxon_twosample(iris[,1:2], iris[,3:4])
obs.x obs.y obs.tot statistic pvalue alternative location.null exact corrected
Sepal.Length 150 150 300 19249 1.702530e-26 two.sided 0 FALSE TRUE
Sepal.Width 150 150 300 22362 1.295486e-49 two.sided 0 FALSE TRUE