如何一次提取p值并将p值保存为csv文件?

How to extract p-values at a time and save p-values as csv files?

我有兴趣在 R 中执行方差分析。 我所做的如下所示 link 由 zx8754 提供; https://www.biostars.org/p/383058/

实际上,这对我的数据集很有效。 然后,我只想提取 p 值,但是我做不到。 我能够做的是一个一个地提取单个 p 值。

尽管到处都有很多建议(包括堆栈溢出),但其中 none 对我有用。

我有一个大数据集。 尽管方差分析有效,但我无法看到完整的结果。 我只看到最后几百个结果的结果。 由于数据量大,第一个到中间的结果缺失(未显示)。 因此,我只想提取 p 值并将它们保存为 csv 文件。

这是我为方差分析所做的代码,我确实得到了包括 p 值在内的所有结果。

lapply(split(df1, df1$Class), function(i){anova(lm(Value ~ Sample, data = i))})

接下来,如果我执行下面的代码,我可以得到第一个对应的p值。

unlist(lapply(split(df1, df1$GeneSymbol), function(i){anova(lm(Value ~ Label, data = i))})[[1]]$"Pr(>F)"[1])

如果我将 [1] 更改为 [2],那么我将获得与第二个对应的 p 值。

unlist(lapply(split(df1, df1$GeneSymbol), function(i){anova(lm(Value ~ Label, data = i))})[[2]]$"Pr(>F)"[1])

我想做的是一次提取多个 p 值或将它们保存为 csv 文件。 我应该怎么做才能解决这个问题? 提前致谢!

您可以对每个组应用 anova 并从中提取 p 值

vals <- sapply(split(df, df$GeneSymbol), function(i) 
              anova(lm(Value ~ Label, data = i))$"Pr(>F)"[1])
vals

#       A         B         C 
#0.6419426 0.9446151 0.9146334 

如果你想把它写成csv,你可以这样做

p_data <- data.frame(p_value = vals)
write.csv(p_data, "/path/of/the/file.csv", row.names = FALSE)

dplyr 类似,您可以

df %>%
  group_split(GeneSymbol) %>%
  purrr::map_dbl(~anova(lm(Value ~ Label, data = .))$"Pr(>F)"[1])

#[1] 0.6419426 0.9446151 0.9146334

数据

df <- structure(list(GeneSymbol = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 
1L, 2L, 3L, 1L, 2L, 3L), .Label = c("A", "B", "C"), class = "factor"), 
Value = c(0.14, 0.16, 0.01, 0.18, 0.54, 0.18, 0.2, 0.54, 
0.2, 0.02, 0.2, 0.02), Label = c(1L, 1L, 1L, 1L, 1L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L)), class = "data.frame", row.names = c("2", 
"3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"))