2017-10-09 9 views
0

J'ai deux dataframes:Comment faire le test de Wilcoxon sur les colonnes entre deux dataframes

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) 

et que vous voulez appliquer test sur chaque colonne wilcox (DF $ As, DO $ As) et ainsi de suite. J'ai essayé le code suivant:

lapply(ncol(D9), function(i) {wilcox.test((D9[,i]),(D10[,i]))}) 

Et la sortie est:

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

Alors ma question est - ce que je fais mal? Toute aide est appréciée.

Merci à l'avance.

+1

S'il vous plaît fournir un [exemple reproductible] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) où tous les variables sont définies afin que nous puissions copier/coller dans R pour tester des solutions possibles. – MrFlick

Répondre

1

Notez que ncol(D9) ne retournera qu'un seul nombre, donc lapply ne fera que parcourir ce nombre unique. Utilisez 1:ncol(D9) pour commencer à la première colonne (ou utilisez seq.int(ncol(D9)). Voyez la différence entre lapply(9, print) et lapply(1:9, print)

Alternative vous pouvez qu'élaborer sur les colonnes directement avec

Map(wilcox.test, D9, D10) 

depuis data.frames sont vraiment juste liste.

0

lapply a besoin d'un vecteur, donc @ ce qui suggère sera probablement de l'aide de MrFlick (vous en fait seulement un test exécuté wilcox)

vous pouvez également ge t impressions itératives par une boucle

for(i in 1:ncol(D9)){ 
    summary(wilcox.text(D9[,i],D10[,i])) 
}