首页 > 解决方案 > 循环遍历数据框以提取 R 中值大于阈值的特定对

问题描述

我有一个不同基因对之间的 z 分数数据框。数据框如下所示:

df <- data.frame(geneID=c("CDKN2A", "JUN", "IRS2","MTOR",
                            "NRAS"),
                  ABL1=c(-0.19,NA,2.01,0.4,1.23),
                  AKT1=c(0.11,2.45,NA,NA,1.67),
                  AKT2=c(1.19,NA,2.41,0.78,1.93),
                  AKT3=c(2.78,NA,NA,0.7,2.23),
                  ALK=c(NA,NA,NA,2.4,1.23))

我想过滤高于 2 的 z 分数并将它们输出到以下格式的单独数据框中:

gene1   gene2 z-score
IRS2    ABL1  2.01
JUN     AKT1  2.45
CDKN2A  AKT3  2,78
NRAS    AKT3  2.23
MTOR    ALK   2.4

我试图过滤掉行和列,但结果我丢失了一些满足阈值 2 的值。我的表的维数是 18215 行和 270 列。

我将非常感谢任何帮助或建议!

非常感谢!奥尔哈

标签: rdataframeloops

解决方案


这是另一个基本 R 选项

inds <- which(df[-1] > 2, arr.ind = TRUE)
dfout <- data.frame(
  gene1 = df$geneID[inds[, "row"]],
  gene2 = names(df[-1])[inds[, "col"]],
  z_score = df[-1][inds]
)

这样

> dfout
   gene1 gene2 z_score
1   IRS2  ABL1    2.01
2    JUN  AKT1    2.45
3   IRS2  AKT2    2.41
4 CDKN2A  AKT3    2.78
5   NRAS  AKT3    2.23
6   MTOR   ALK    2.40

推荐阅读