【问题标题】:merging two df in R where the values may be swapped in the two columns (ie col1 maybe present in col2 in the other df)合并 R 中的两个 df,其中值可以在两列中交换(即 col1 可能存在于另一个 df 中的 col2 中)
【发布时间】:2020-11-24 03:35:58
【问题描述】:

我正在尝试将两个数据框合并为两列,其中gene1 或gene2 的值可能在任一列中

df1<-data.frame(gene_1=c('A','B','E'),
                gene_2=c('B','C','C'),
                value =c(0,1,1))

df2<-data.frame(gene_1=c('B','B','D'),
                gene_2=c('A','C','E'),
                value=c(1,0.5,1))

而期望的结果是:

   result<-data.frame(gene_1=c('A','B','D','E'),
                      gene_2=c('B','C','E','C'),
                      value1=c(0, 1, NA, 1),
                      value2=c(1, 0.5, 1, NA))

它将合并两个dfs中的第一行gene1 = A,gene2 = B和gene1 = B和gene2 = A,因为gene1与gene2是任意的。

谢谢

【问题讨论】:

    标签: r dataframe join merge


    【解决方案1】:

    您可以对两个数据集中的gene_1gene_2 列进行排序,然后执行full_join

    library(dplyr)
    
    df1 %>%
      transmute(col1 = pmin(gene_1, gene_2), 
                col2 = pmax(gene_1, gene_2), 
                value1 = value) %>%
      full_join(df2 %>%
      transmute(col1 = pmin(gene_1, gene_2), 
                col2 = pmax(gene_1, gene_2), 
                value2 = value), 
      by = c('col1', 'col2'))
    
    
    #  col1 col2 value1 value2
    #1    A    B      0    1.0
    #2    B    C      1    0.5
    #3    C    E      1     NA
    #4    D    E     NA    1.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 2021-10-28
      • 1970-01-01
      • 2019-12-22
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多