R中多列的单样本Wilcoxon符号秩检验



我想使用一个样本的Wilcoxon符号秩测试来测试R中的每一列是否显著大于0。我可以单独遍历每一列,但理想情况下,我希望使用lapply循环遍历每一行,并将p值记录在一个单独的数据帧中。数据帧的每一行都列出了给定年份的月度值:

df = data.frame("year"=c(1:20), "jan"=runif(20), "feb"=runif(20))

每年和每月共有13列。

我现在使用的代码将每一列都比较为零,但我想结合lapply函数来简化一些事情:

wilcox.test(df[,1], mu=0, alternative="greater")

我试过:

res = lapply(df, function(x){
wilcox.test(df[,x[1]], mu=0, alternative="greater")
})

但我遇到了一个错误,我对wilcox.test函数的输入不是数字,这让我认为它不是在单个列中读取的。我在这篇文章中尝试了使用一些建议,但在修改代码以用于一个示例测试时遇到了问题。我是lapply和写作功能的新手,非常感谢您的帮助!

您可以使用lapply直接应用于data.frame中的列。通过只对包含数值的列进行子设置,确保只传递这些列。

lapply(df[,2:13],function(x){wilcox.test(x, mu=0, alternative="greater")})

您的版本不起作用,因为您正试图用df的整列(即df[,df[,1]],而不是df[,1](将df子集化。

为了进一步简化,可以使用sapply$p.value只访问p值结果。

sapply(df[,2:13],function(x){wilcox.test(x, mu=0, alternative="greater")$p.value})
#         jan          feb          mar          apr          may          jun          #jul          aug          sep          oct          nov 
#9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 
#         dec 
#9.536743e-07 

数据

df <- data.frame(year = 1:20, lapply(rep(20,12),runif))
names(df)[2:13] <- tolower(month.abb)

最新更新