至少一些列满足条件

时间:2016-04-21 12:15:35

标签: r

我有一个50000多行和1600多列的数据框。数据框的前两列是因子,其余列是数字。我想丢弃每行中少于80列的单元格值小于0.1(<0.1)的所有行。

更具体地,每行是基因,列是样品。该值包含特定样品中基因的表达。如果基因表达值在80(或1600个样本中的5%)中小于0.1,则丢弃它。

我使用以下代码

df = df[rowSums(df>0.1)>=80, ]

df>0.1为每个元素提供TrueFalse,我计算sum [True=1 and False = 0],如果总和小于80,则丢弃该行。

但是,由于我的数据框的前两列是因子,它似乎没有那么好用。如果我只能为某些列选择rowSums,那将会很有帮助。另一个等效的代码是

df = df[apply(df[,-1], MARGIN = 1, function(x) sum(x>0.1)>=80}),]

当我在前两列中有因子时,两者都不起作用。

1 个答案:

答案 0 :(得分:1)

也许试试这个:

dfSubset <-
  df[rowSums(df[, -c(1:2) ] > 0.1) >= (ncol(df) - 2) * 0.05, ]

对于rowums,我们排除前2列,并获得5%的剩余列数(而不是使用硬编码的数字80)。