根据另一个数据框/列表对数据框中的列进行子集化

Posted

技术标签:

【中文标题】根据另一个数据框/列表对数据框中的列进行子集化【英文标题】:subset a column in data frame based on another data frame/list 【发布时间】:2016-12-15 11:50:16 【问题描述】:

我有以下table1,这是一个由 6 列和 8083 行组成的数据框。下面我展示了这个table1的头部:

|gene ID        |   prom_65|   prom_66|  amast_69|  amast_70|   p_value|
|:--------------|---------:|---------:|---------:|---------:|---------:|
|LdBPK_321470.1 |   24.7361|   25.2550|   31.2974|   45.4209| 0.2997430|
|LdBPK_251900.1 |  107.3580|  112.9870|   77.4182|   86.3211| 0.0367792|
|LdBPK_331430.1 |   72.0639|   86.1486|   68.5747|   77.8383| 0.2469355|
|LdBPK_100640.1 |   43.8766|   53.4004|   34.0255|   38.4038| 0.1299948|
|LdBPK_330360.1 | 2382.8700| 1871.9300| 2013.4200| 2482.0600| 0.8466225|
|LdBPK_090870.1 |   49.6488|   53.7134|   59.1175|   66.0931| 0.0843242|

我有另一个数据框,称为accessions40,它是一个包含 510 个基因 ID 的列表。它是table1 第一列的子集,即它的所有值(510)都包含在table1(8083)的第一列中。 accessions40的头部如下图所示:

|V1             |
|:--------------|
|LdBPK_330360.1 |
|LdBPK_283000.1 |
|LdBPK_360210.1 |
|LdBPK_261550.1 |
|LdBPK_367320.1 |
|LdBPK_361420.1 |

我想要做的是以下内容:我想生成一个新的table2,它在第一列(基因 ID)下仅包含 accessions40 中存在的值以及来自 @ 的其他五列中的相应值987654331@。换句话说,我想根据accessions40 的值对table1 的第一列进行子集化。

【问题讨论】:

【参考方案1】:

我们可以使用%in% 得到一个逻辑向量,并在此基础上使用subset 'table1' 的行。

subset(table1, gene_ID %in% accessions40$V1)

更好的选择是data.table

library(data.table)
setDT(table1)[gene_ID %chin% accessions40$V1]

或者从dplyr使用filter

library(dplyr)
table1 %>%
      filter(gene_ID %in% accessions40$V1)

【讨论】:

如何过滤gene_ID中不在accession40$V1中的值? @RanonKahn 使用否定(!setDT(table)[!gene_ID %chin% accessions40$V1] 我在错误的地方使用了否定符号并遇到了错误。谢谢! 虽然晚了,但很高兴收到您的来信。我有同样的问题,我使用了这个子集代码,但它给出了一个空的输出文件,其中只有第一个(原始)文件中的列名,在这篇文章中称为“table1”。你能帮我解决这个问题吗? @Mary 请考虑以可重复的示例作为新问题发布【参考方案2】:

有很多方法可以做到这一点。在table1 中找到gene_ID,它们存在于accession40V1 列中

table1[table1$gene_ID %in% accessions40$V1, ]

或者你也可以使用match

table1[match(accessions40$V1, table1$gene_ID), ]

【讨论】:

以上是关于根据另一个数据框/列表对数据框中的列进行子集化的主要内容,如果未能解决你的问题,请参考以下文章

Spark基于其他数据框中的列对数据框中的列进行重复数据删除

根据列中的条件对数据框中的行进行子集/过滤

使用值列表从 Pandas 数据框中选择行

使用值列表从 Pandas 数据框中选择行

根据熊猫数据框中的列标签对数据进行分组

如何对一个数据框中的列值求和并将结果添加为另一个数据框中的列?