p.调整 R 中同一数据框中的多列

p. adjust for multiple columns in the same dataframe in R

我有一个包含数百个 p 值的数据框,我想为其计算 FDR 显着性。

我的数据框:

Trait p-value1 p-value2 p-value3 pvalue4
1 0.5 0.01 0.1 0.12
2 0.1 0.9 0.4 0.32
3 0.2 0.45 0.34 0.45
4 0.2 0.02 0.22 0.11

我使用以下脚本为每一列单独执行此操作(p-value1 上的示例):

fdr <- p.adjust (p-value1, method = "fdr", n = length(p-value1)) 

如何同时对所有列执行此操作?

假设您不需要为 PK 做,即 trait 列。在 R 版本 4.1.0

中试试这个
lapply(my_df[-1], \(x) p.adjust (x, method = "fdr", n = length(x)))

或者旧版本中的这个

lapply(my_df[-1], function(x) p.adjust (x, method = "fdr", n = length(x)))

你可以使用 dplyr:

library(dplyr)

df%>%mutate(across(contains("p-value"), ~ p.adjust(.x, method = "fdr", n = length(.x))))

如果您想要新列但要保留以前的列,您可以添加一个 .names 参数:

df%>%mutate(across(contains("p-value"), ~ p.adjust(.x, method = "fdr", n = length(.x)), .names="fdr_{.col}"))