Нахождение общих значений между тремя или более фреймами данных - PullRequest
0 голосов
/ 26 июня 2018

Я работаю с 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 голосов
/ 26 июня 2018
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")
...