【问题标题】:Count number of shared observations between samples using dplyr使用 dplyr 计算样本之间共享观察的数量
【发布时间】:2017-11-08 20:59:43
【问题描述】:

我有一个按样本分组的观察结果列表。我想找到具有最相同观察结果的样本。一个相同的观察结果是两个样本之间的起始编号和结束编号都匹配。如果可能的话,我想使用 R 并且最好使用 dplyr 来做到这一点。 我已经习惯于使用 dplyr 进行更简单的数据处理,但这项任务超出了我目前的能力范围。我一直认为解决方案是将开始和结束分组到一个变量中:group_by(start,end) 但我还需要保留有关每个观察属于哪个样本的信息并在样本之间进行比较。

示例:

sample  start   end
a   2   4
a   3   6
a   4   8
b   2   4
b   3   6
b   10  12
c   10  12
c   0   4
c   2   4

这里的样本 a、b 和 c 共享 1 个观察值 (2, 4) 样本 a 和 b 共享 2 个观测值 (2 4, 3 6) 样本 b 和 c 共享 2 个观测值 (2 4, 10 12) 样本 a 和 c 共享 1 个观察结果 (2 4)

我想要这样的输出:

abc 1
ab 2
bc 2
ac 1 

如果可能的话,还可以查看共享的观察结果:

abc 2 4
ab 2 4 
ab 3 6

提前致谢

【问题讨论】:

    标签: r group-by dplyr overlap


    【解决方案1】:

    这是一个基于 R 的想法,

    final_d <- data.frame(count1 = sapply(Filter(nrow, split(df, list(df$start, df$end))), nrow), 
                          pairs1 = sapply(Filter(nrow, split(df, list(df$start, df$end))), function(i) paste(i[[1]], collapse = '')))
    
    #      count1 pairs1
    #0.4        1      c
    #2.4        3    abc
    #3.6        2     ab
    #4.8        1      a
    #10.12      2     bc
    

    【讨论】:

      【解决方案2】:

      这里有一些东西可以帮助你:

      df %>% 
        group_by(start, end) %>% 
        summarise(
          samples = paste(unique(sample), collapse = ""), 
          n = length(unique(sample)))
      
      # Source: local data frame [5 x 4]
      # Groups: start [?]
      # 
      #   start   end samples     n
      #   <int> <int>   <chr> <int>
      # 1     0     4       c     1
      # 2     2     4     abc     3
      # 3     3     6      ab     2
      # 4     4     8       a     1
      # 5    10    12      bc     2
      

      【讨论】:

        猜你喜欢
        • 2021-02-22
        • 2022-01-19
        • 1970-01-01
        • 2023-03-05
        • 2014-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-07
        相关资源
        最近更新 更多