申请提取Pvalue和列表名称aov

时间:2018-03-07 15:28:20

标签: r apply

我的数据框如下:

ID<-c(rep("A", times=5), rep("B", times=5), rep("C", times=5) )
A<-runif(15, 29, 31)
B<-runif(15, 1, 11)
C<-c(runif(5, 0.1, 0.2),NA,NA, runif(3, 10, 11), runif(4, 0.5, 0.52), NA)
D<-runif(15, 2, 7)
df1a<-data.frame(ID,A,B, C, D)

我使用apply来计算aov

ss<-apply(df1a[,2:ncol(df1a)], 2, function(x)(summary(aov(x~df1a[,"ID"]))))

我想使用apply提取列表名称$CPr(>F)。我的代码在下面,但它不起作用

ssp<-apply(df1a[,2:ncol(df1a)], 2, function(x)(summary(aov(x~df1a[,"ID"]))[[1]][["Pr(>F)"]]))))

1 个答案:

答案 0 :(得分:1)

我们可以使用lapply

执行此操作
lapply(df1a[-1], function(x) summary(aov(x ~ df1a[["ID"]])))[['C']][[1]]$`Pr(>F)`
#[1] 1.404514e-13           NA

或使用OP代码apply

apply(df1a[,2:ncol(df1a)], 2, function(x)
        (summary(aov(x~df1a[,"ID"]))))[["C"]][[1]][, "Pr(>F)"]
#[1] 1.404514e-13           NA

更新

如果我们需要所有的p值

sapply(df1a[-1], function(x) summary(aov(x ~ df1a[["ID"]]))[[1]][1,'Pr(>F)'])

或者作为两栏&#39; data.frame&#39;

stack(lapply(df1a[-1], function(x) summary(aov(x ~ df1a[["ID"]]))[[1]][1,'Pr(>F)']))[2:1]