首页 > 解决方案 > 根据 dplyr 中的列在组之间保留公共行

问题描述

我的数据框看起来像这样

df <- data.frame(gene=c("A","B","C","A","B","D"), 
                 origin=rep(c("old","new"),each=3),
                 value=sample(rnorm(10,2),6))

  gene origin     value
1    A    old 1.5566908
2    B    old 1.3000358
3    C    old 0.7668213
4    A    new 2.5274712
5    B    new 2.2434525
6    D    new 2.0758326

我想找到两个不同的起源组(旧的和新的)之间的共同基因

我希望我的数据看起来像这样

  gene origin     value
1    A    old 1.5566908
2    B    old 1.3000358
4    A    new 2.5274712
5    B    new 2.2434525

任何帮助表示赞赏。理想情况下,我想在使用多列的组中找到共同的行

标签: rdataframedplyrfilteringtidyverse

解决方案


使用ave+的基本 R 选项subset

subset(
  df,
  as.logical(ave(origin,gene,FUN = function(x) all(c("old","new")%in% x)))
)

  gene origin     value
1    A    old 0.5994593
2    B    old 4.0449345
4    A    new 3.2478612
5    B    new 0.2673525

推荐阅读