【问题标题】:matching pairs within one column using another column使用另一列匹配一列中的对
【发布时间】:2021-05-01 01:38:54
【问题描述】:

我有一个这样的数据框:

samples 列有多个唯一值,其中很少有 samples 与另一个样本配对(在同一列 samples 中)。这个匹配对由match 列给出。如match 列中的 none 值所示,很少有样本不匹配。

library(tibble)
df <- tribble(~ `samples`, ~ `match`,
              "A0H", "B2D",
              "A2D", "none",
              "B4H", "A4D",
              "A1H", "B3H",
              "A4D", "B4H",
              "B3H", "A1H",
              "B5D", "none", 
               "B2D", "A0H"
)

我现在想要另一列指示正确的。像这样:

df <- tribble(~ `samples`, ~ `match`, ~`pairs`
              "A0H", "B2D", "1",
              "A2D", "none",NA,
              "B4H", "A4D","2",
              "A1H", "B3H","3",
              "A4D", "B4H","2",
              "B3H", "A1H","3",
              "B5D", "none", NA,
               "B2D", "A0H", "1",
)

我怎么到这里?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    你可以试试这个:

    library(igraph)
    matches <- df[df$match != "none",]
    groups <- clusters(graph.data.frame(matches))$membership
    df$pairs <- groups[df$samples]
    df
    
    #> # A tibble: 8 x 3
    #>   samples match pairs
    #>   <chr>   <chr> <dbl>
    #> 1 A0H     B2D       1
    #> 2 A2D     none     NA
    #> 3 B4H     A4D       2
    #> 4 A1H     B3H       3
    #> 5 A4D     B4H       2
    #> 6 B3H     A1H       3
    #> 7 B5D     none     NA
    #> 8 B2D     A0H       1
    

    我们的想法是认为您的df 只是一个图的边列表。 基于此,您可以使用 igraph 包中的函数来查找组。

    这样,即使组由 2 个以上的样品组成,您也可以获得固溶体。 (就个人而言,我一直怀疑数据中可能存在一些隐藏的污垢)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 2019-11-19
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      相关资源
      最近更新 更多