如果值在R中已知,则在表中查找行

时间:2014-09-23 00:57:40

标签: r rows

我正在分析 R 中数千个基因的表格。每个基因都是一行并具有相应的mRNA表达值。在这些值中,我被要求从所有条目中找到最大表达式值,这是我使用max()函数完成的。它返回了最大表达式值,但没有返回相应的行(基因名称)。 是否有人知道如何在表格中找到已知值的未知行?

3 个答案:

答案 0 :(得分:2)

要查找最大值的位置,您可以使用which.max()功能。

更一般地说,如果要获取符合某些条件的元素的位置,可以使用extract运算符[并执行相等性测试。例如对于data.frame dat

which(dat == max(dat), arr.ind = TRUE)

这将返回最大值所在的数组索引。您可以将条件更改为任何内容,效果相同。

有关使用extract对数据进行子集化的详细信息,请参阅帮助文件?'['

答案 1 :(得分:0)

这个怎么样?这可能是一种更优雅的方式。

df <- data.frame(x=c(1,2,3,4,5), y=c(1,1,1,6,2))
which.max(apply(df, 1, max))

它按行计算最大值,然后找到具有总体最大值的行。根据您拥有的列数与行数的比较,可能更快找到包含最大值的列,然后找到相应的行:

match(max(df), df[, which.max(apply(df, 2, max))])

答案 2 :(得分:0)

尝试使用示例:

> ddf = structure(list(ex1 = c(10L, 35L, 18L), ex2 = c(20L, 20L, 42L), 
    ex3 = c(30L, 15L, 25L)), .Names = c("ex1", "ex2", "ex3"), class = "data.frame", row.names = c("abcd", 
"defg", "ijkl"))

> ddf
     ex1 ex2 ex3
abcd  10  20  30
defg  35  20  15
ijkl  18  42  25

如果要找到最大列数:

> data.frame(maxrow=rownames(ddf)[apply(ddf, 2, which.max)], maxval=apply(ddf, 2, max))
    maxrow maxval
ex1   defg     35
ex2   ijkl     42
ex3   abcd     30

或:

> t(data.frame(maxrow=rownames(ddf)[apply(ddf, 2, which.max)], maxval=apply(ddf, 2, max)))
       ex1    ex2    ex3   
maxrow "defg" "ijkl" "abcd"
maxval "35"   "42"   "30"  

如果要找到最多行:

> idx = apply(ddf, 1, which.max)
> outdf = data.frame(gene=rownames(ddf), maxcol=colnames(ddf)[idx], maxval=apply(ddf, 1, max))
> rownames(outdf) = 1:nrow(ddf)
> outdf
  gene maxcol maxval
1 abcd    ex3     30
2 defg    ex1     35
3 ijkl    ex2     42

或:

> data.frame(maxcol=colnames(ddf)[apply(ddf, 1, which.max)], maxval=apply(ddf, 1, max))
     maxcol maxval
abcd    ex3     30
defg    ex1     35
ijkl    ex2     42