2015-11-17 25 views
2

我有一個名爲tbl的r數據表。 我想執行一個wilcox測試來比較每一列與表中的每一列,並將p值存儲在一個新的表或矩陣中。如何應用wilcox.test來比較表中的每一列

爲了比較(在這種情況下,1和2)的單個列對我通常只是這樣做:

wilcox.test(tbl[,1],tbl[,2],alternative="t",paired=FALSE) 

任何幫助不勝感激。

+0

這也許較早的帖子可以幫你。 [鏈接到帖子](http://stackoverflow.com/questions/21271449/how-to-apply-the-wilcox-test-to-a-whole-dataframe-in-r) – Ewoud

回答

4

一種方法是存儲您的tbl的雙向組合,然後使用lapply來計算p.values。事情是這樣的:

#example data.frame 
df <- data.frame(a = runif(10), b= runif(10), c=runif(10)) 

#calculate combinations of names 
combinations <- as.data.frame(combn(names(df), 2), stringsAsFactors=FALSE) 

#use the above combinations and calculate the wilcox.test to get the p.values 
lapply(combinations, function(x) { 
    wilcox.test(df[,x[1]] , df[, x[2]], alternative="t", paired=FALSE)$p.value 
}) 

輸出:

$V1 
[1] 0.8534283 

$V2 
[1] 0.2175626 

$V3 
[1] 0.3526814 
+0

如果你沒有指定'stringsAsFactors = FALSE'時,名稱將被保存爲因子,並且只有'1'和'2'將被輸入到'lapply'函數,這樣每次都會得到相同的p.value。這個非常重要。 – LyzandeR