按 R 中的列值过滤列表中的每个数据框

Posted

技术标签:

【中文标题】按 R 中的列值过滤列表中的每个数据框【英文标题】:Filter each dataframe in a list by a column value in R 【发布时间】:2020-01-30 10:32:03 【问题描述】:

我有一个包含 18 个数据框的列表,它们看起来都类似于:

 Gene ID    HMMER   Hotpep  DIAMOND #ofTools
actino_5_2__00070   GT20(2-473) GT20(5) GT20    3
actino_5_2__00270   CE1(65-331) -   -   1
actino_5_2__00610   GT4(224-382)    GT4(7)  GT4 3
actino_5_2__00950   GH3(26-242) GH3(2)  GH3 3
actino_5_2__01300   GH23(67-175)    -   -   1
actino_5_2__01490   GT4(381-524)    GT4(82) GT4 3
actino_5_2__01990   CE1(114-349)    -   -   1

我想过滤列表中的每个数据框,但最后一列的值 >= 2。所以这个filt_comb_data = comb_data[comb_data$X >= 2,] 几乎是一个列表。我首先使用 lapply 和以下内容:

filt_datalist = lapply(datalist, function(x)
  x[x[5],] >= 2
)

但我收到此错误:

Error in `[.default`(xj, i) : invalid subscript type 'list' 

如有任何帮助,将不胜感激。

【问题讨论】:

【参考方案1】:
filt_datalist = lapply(datalist, function(x)
    x[x[, 5] >= 2,]
)

应该是这样的。您获取数据框 (x) 并过滤第 5 列 (x[, 5]) 为 >= 2 的所有内容。

【讨论】:

顺便说一句:我会尽量避免x[, 5] - 如果您知道列名x$columnName 更好,因为感兴趣的列也可能在另一个位置。

以上是关于按 R 中的列值过滤列表中的每个数据框的主要内容,如果未能解决你的问题,请参考以下文章