【问题标题】:Extracting rows from data frame based on another data frame基于另一个数据框从数据框中提取行
【发布时间】:2020-09-23 13:34:48
【问题描述】:

我正在尝试根据包含我感兴趣的基因列表的另一个数据矩阵从我的大型数据集中提取一组基因(行名)。我读过我应该使用过滤器和 %in% 命令,但不确定如何正确编写它。

示例: 我的大型数据库:

Gene        Week1         Week 2.        Week 3
A.           20.           14.            5
B.           5.            10.            15
C.           2.            4.             6
D.           20.           18.            19

我的小数据库:

Gene
A
C
D

我希望我的结果是:

Gene        Week1         Week 2.        Week 3
A.           20.           14.            5
C.           2.            4.             6
D.           20.           18.            19

有人可以帮忙吗?我真的很感激,我为这个相当简单的问题道歉:)

【问题讨论】:

标签: r time-series filtering subset datamatrix


【解决方案1】:

使用逻辑行索引:

large_database[large_database$Gene %in% unique(small_data_base$Gene), ]

解释:

large_database$Gene %in% unique(small_data_base$Gene)

检查large_database$Gene 中的每个条目(即行)是否出现在unique(small_database$Gene) 中,即small_data_baseGene 列中的唯一值列表,并返回一个布尔向量(一个TRUE 和FALSE 向量)。

然后我们可以将此向量用作行“索引”以仅选择向量为 TRUE 的行(即 large_database$Gene 的值在 unique(small_database$Gene)

【讨论】:

  • 如果Gene 是唯一的,match 可以使用:large_database[match(small_data_base$Gene, large_database$Gene),]
  • 实际上,matchtidyr::join 等如果 small_data_base$Gene 仅具有唯一值(而不是两者)就足够了。但是由于该问题明确要求使用% 提出解决方案,因此建议使用上述解决方案;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
相关资源
最近更新 更多