0

我有两个数据框:

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

所以我的问题是——我做错了什么?

任何帮助表示赞赏。

4

4 回答 4

2

我们有两个不同的数据框d1d2,大小分别为X变量的N个观测值和Y变量的N个观测值。为了在这两个不同数据帧d1d2 的每一列之间找到 Wilcoxon-Matt-Whitney 检验: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, ...等等

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)))

现在对d3$1的每一列进行 Wilcoxon-Matt-Whitney 检验,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)} }
于 2018-04-21T02:07:38.090 回答
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 实际上只是列表。

于 2017-10-09T22:40:24.753 回答
0

这是使用包的替代方法,在 iris 第一列 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
于 2019-09-19T18:51:49.997 回答
0

lapply 需要一个向量,所以@MrFlick 的建议可能会有所帮助(实际上你只运行了一个 wilcox 测试)

您还可以通过循环获得迭代打印输出

for(i in 1:ncol(D9)){
    summary(wilcox.text(D9[,i],D10[,i]))
}
于 2017-10-09T22:42:19.270 回答