按 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 中的列值过滤列表中的每个数据框的主要内容,如果未能解决你的问题,请参考以下文章

在python中过滤与列表值匹配的列值的数据框[重复]

Pyspark:如何将现有非空列的元组列表作为数据框中的列值之一返回

将包含列表的记录值与 Postgres 中的列值进行比较

在旋转之后,按R中的公共列值折叠新行

如何根据一个数据帧中的列值和R中另一个数据帧的列标题名称有条件地创建新列

从 Kentico 10 中的自定义表重复器中过滤重复的列值