【问题标题】:Finding common values between three or more dataframes查找三个或更多数据帧之间的共同值
【发布时间】:2018-12-05 07:02:01
【问题描述】:

我正在使用 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

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

【问题讨论】:

    标签: r dataframe dplyr inner-join


    【解决方案1】:
    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")
    

    【讨论】:

    • 这行得通,但我稍微修改了一下。我看到列“V1”中的某些值没有显示,即使它们存在于多个表(4 个表)中。我认为这是因为在一个表中存在重复的值(例如 A A A B C,它并没有将所有 A A A 显示为多个文件共有,即使它们是!)。也许是因为我不能选择列名而不是“V1”
    • 这太令人惊讶了。如果您可以在一个可复制的最小示例中综合此问题并编辑您的问题,我会看看。
    • 我用你的代码举例说明(大部分都可以工作,但结果有些奇怪)
    猜你喜欢
    • 2020-10-04
    • 2019-11-10
    • 2021-03-20
    • 2023-02-16
    • 2015-05-26
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多