运行 数据框列的 Shapiro-Wilk 测试,跳过因子
Running Shapiro-Wilk test on columns of a dataframe, skipping factors
我有以下数据框:
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))
我可以将 shapiro.test
应用于个别列,并查看 p 值是否小于 0.05,如下所示:
shapiro.test(alpha)
shapiro.test(alpha)$p.value<0.05
但我想知道我是否可以批量执行此操作,将 shapiro.test
应用于数据框中由连续数据组成的每一列(跳过由因子组成的列)。我想象的方式是:
shapiro.test(names(df))
which(shapiro.test(names(df))$p.value<0.05)
但是没有用。有什么建议么?如果可能的话,我宁愿避免循环。
一般来说,你可以写一点自定义函数,像这样使用它:
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
}
然后键入 ans
以查看结果。
我有以下数据框:
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))
我可以将 shapiro.test
应用于个别列,并查看 p 值是否小于 0.05,如下所示:
shapiro.test(alpha)
shapiro.test(alpha)$p.value<0.05
但我想知道我是否可以批量执行此操作,将 shapiro.test
应用于数据框中由连续数据组成的每一列(跳过由因子组成的列)。我想象的方式是:
shapiro.test(names(df))
which(shapiro.test(names(df))$p.value<0.05)
但是没有用。有什么建议么?如果可能的话,我宁愿避免循环。
一般来说,你可以写一点自定义函数,像这样使用它:
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
}
然后键入 ans
以查看结果。