如何一次提取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"))
我有兴趣在 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"))