在数据帧的列上运行Shapiro-Wilk测试,跳过因子

时间:2016-01-17 21:17:24

标签: r distribution

我有以下数据框:

sin(x)

我可以将alpha<-rnorm(100,40) beta<-sort(1:100) gamma<-sample(30:75,100,replace=T) delta<-c(rep("A",25),rep("B",25),rep("C",25),rep("D",25)) df<-as.data.frame(cbind(alpha,beta,gamma,delta)) 应用于各个列,并查看p值是否小于0.05,如下所示:

shapiro.test

但是我想知道我是否可以批量执行此操作,将shapiro.test(alpha) shapiro.test(alpha)$p.value<0.05 应用于数据框中由连续数据组成的每一列(跳过由因子组成的列)。我想象的方式是:

shapiro.test

但它没有用。有什么建议?如果可能的话,我宁愿避免循环。

1 个答案:

答案 0 :(得分:1)

通常,您可以编写一些自定义函数并使用它:

DefaultHandler

您在示例中调用alpha<-round(rnorm(100,40)) beta<-sort(1:100) gamma<-sample(30:75,100,replace=T) df<-as.data.frame(cbind(alpha,beta,gamma)) myfun <- function(x) res <- shapiro.test(x)$p.value apply(df, 2, myfun) 的方式是不使用数据框,而是在工作区中使用shapiro.test的值。

查看alpha了解详情。

编辑:如果你的数据集包含因子,这里有一种跳过它们的方法(注意:我修改了你的数据集):

?apply

然后输入alpha<-rnorm(100,40) beta<-sort(1:100) gamma<-sample(30:75,100,replace=T) delta<-c(rep("A",25),rep("B",25),rep("C",25),rep("D",25)) df<-data.frame(alpha,beta,gamma,delta) ans <- rep(NA, ncol(df)) for (i in 1:ncol(df)) { if (is.factor(df[,i])) next ans[i] <- shapiro.test(df[,i])$p.value } 以查看结果。