我有一个50000多行和1600多列的数据框。数据框的前两列是因子,其余列是数字。我想丢弃每行中少于80列的单元格值小于0.1(<0.1)的所有行。
更具体地,每行是基因,列是样品。该值包含特定样品中基因的表达。如果基因表达值在80(或1600个样本中的5%)中小于0.1,则丢弃它。
我使用以下代码
df = df[rowSums(df>0.1)>=80, ]
df>0.1
为每个元素提供True
或False
,我计算sum [True=1 and False = 0]
,如果总和小于80,则丢弃该行。
但是,由于我的数据框的前两列是因子,它似乎没有那么好用。如果我只能为某些列选择rowSums,那将会很有帮助。另一个等效的代码是
df = df[apply(df[,-1], MARGIN = 1, function(x) sum(x>0.1)>=80}),]
当我在前两列中有因子时,两者都不起作用。
答案 0 :(得分:1)
也许试试这个:
dfSubset <-
df[rowSums(df[, -c(1:2) ] > 0.1) >= (ncol(df) - 2) * 0.05, ]
对于rowums,我们排除前2列,并获得5%的剩余列数(而不是使用硬编码的数字80)。