根据 dplyr 中的列保留组之间的公共行

LDT*_*LDT 6 filtering r dataframe dplyr tidyverse

我的数据框看起来像这样

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
Run Code Online (Sandbox Code Playgroud)

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

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

  gene origin     value
1    A    old 1.5566908
2    B    old 1.3000358
4    A    new 2.5274712
5    B    new 2.2434525
Run Code Online (Sandbox Code Playgroud)

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

Ron*_*hah 4

您可以使用split和reduce来获取共同基因并将其用于filter.

library(dplyr)
library(purrr)

df %>% filter(gene %in% (split(df$gene, df$origin) %>% reduce(intersect)))

#  gene origin value
#1    A    old 1.271
#2    B    old 2.838
#3    A    new 0.974
#4    B    new 1.375
Run Code Online (Sandbox Code Playgroud)

或者保留基本 R -

subset(df, gene %in% Reduce(intersect, split(df$gene, df$origin)))
Run Code Online (Sandbox Code Playgroud)