在任何列中选择具有特定值的行

时间:2014-12-13 10:58:58

标签: r

我得到了一个有基因表达数据的数据框

我试图提取所有列中任何列都有值的数据(数据已经是log2值)> = 2但似乎无法到达那里。我的数据是:

      A B C D
Gene1 1 2 3 1
Gene2 2 1 1 4
Gene3 1 1 0 1
Gene4 1 2 0 1

我只想保留gene1gene2gene4而不说明所有列(因为这只是一个玩具示例)。

1 个答案:

答案 0 :(得分:1)

您可以对从rowSums派生的逻辑矩阵使用df >=2并使用双重否定(!)来获取行的索引到子集。

df[!!rowSums(df >=2),]
#      A B C D
#Gene1 1 2 3 1
#Gene2 2 1 1 4
#Gene4 1 2 0 1

或使用反向条件df <2获取逻辑矩阵,使用rowSums,然后检查这是否小于ncol(df)

df[rowSums(df <2) < ncol(df),]
#     A B C D
#Gene1 1 2 3 1
#Gene2 2 1 1 4
#Gene4 1 2 0 1

或者

df[apply(t(df>=2),2, any), ]

数据

df <- structure(list(A = c(1L, 2L, 1L, 1L), B = c(2L, 1L, 1L, 2L), 
 C = c(3L, 1L, 0L, 0L), D = c(1L, 4L, 1L, 1L)), .Names = c("A", 
"B", "C", "D"), class = "data.frame", row.names = c("Gene1", 
"Gene2", "Gene3", "Gene4"))