查找三个或更多数据框之间的公共值

时间:2018-06-26 14:05:51

标签: r dataframe grep dplyr inner-join

我正在使用R Studio版本1.0.143。

我想制作一个新的数据帧,它仅包含多个数据帧中至少两个数据帧共有的行。问题是:我必须知道公用数据也在哪里!

我正在尝试以下代码,但某些值未被识别为通用值!

library (readxl)
library(tidyverse)
df1 <- read_excel("Sample 1.xlsx")
df2 <- read_excel("Sample 2.xlsx")
df3 <- read_excel("Sample 3.xlsx")
lst(df1,df2,df3) %>%
bind_rows(.id='df') %>%
filter(GENE %in% unique(GENE[duplicated(GENE)])) %>%
mutate(df2=df) %>%
spread(df,df2) -> final

示例如下:

data.frame 1

SITE    GENE
UTR3    MRPL30
UTR3    CASP10
exonic  PPIL3
UTR3    ZNF154
exonic  MET10
UTR3    CRCP
UTR3    CYP20A1
UTR3    PDDC1
UTR3    MET10

data.frame 2

SITE    GENE
UTR3    ZNF154
UTR3    MET10
UTR3    EFHC1
UTR3    SLC11A2
UTR3    SNX22
UTR3    MET10

data.frame 3

SITE    GENE
UTR3    KIAA1143
UTR3    AAK1
UTR3    EFHC1
UTR3    MET10
UTR3    METTL7A
UTR3    MET10

结果:

最终

Site      Gene       df1       df2      df3
UTR3      KIAA1143   NA        NA       df3
UTR3      AAK1       NA        NA       df3
UTR3      ZNF154     df1       df2      NA
UTR3      MET10      df1       NA       NA
UTR3      MET10      NA        df2      NA
UTR3      MET10      NA        NA       df3

.........(表格继续)

如您所见,所有样本中都存在MET10,但代码未给出正确的结果!

我期望以下几点:

Site      Gene       df1       df2      df3
UTR3      KIAA1143   NA        NA       df3
UTR3      AAK1       NA        NA       df3
UTR3      ZNF154     df1       df2      NA
UTR3      MET10      df1       df2      df3

.........(表格继续)

1 个答案:

答案 0 :(得分:0)

library(tidyverse)

lst(df1,df2,df3) %>%
  bind_rows(.id='df') %>%
  filter(V1 %in% unique(V1[duplicated(V1)])) %>%
  mutate(df2=df) %>%
  spread(df,df2)

#   V1  df1 df2 df3
# 1  A  df1 df2 df3
# 2  B  df1 df2 df3
# 3  G <NA> df2 df3
# 4  H <NA> df2 df3

数据

df1 <- read.table(header=F,stringsAsFactors=FALSE,text="
A
B
C
D")

df2 <- read.table(header=F,stringsAsFactors=FALSE,text="
A
B
G
H")

df3 <- read.table(header=F,stringsAsFactors=FALSE,text="
A
B
G
H")