使用dplyr统计样本之间的共享观察数

使用dplyr统计样本之间的共享观察数,r,group-by,dplyr,overlap,R,Group By,Dplyr,Overlap,我有一个按样本分组的观察列表。我想找到那些观察结果最为一致的样本。相同的观察结果是,两个样本之间的起始编号和结束编号都匹配。如果可能的话,我想使用R,最好是dplyr。 我已经习惯于使用dplyr来简化数据处理,但这项任务超出了我目前的能力范围。我一直在想,解决方案包括将开始和结束分组到一个变量中:group_by(start,end),但我还需要保留每个观察所属样本的信息,并在样本之间进行比较 例如: sample start end a 2 4 a 3 6 a 4

我有一个按样本分组的观察列表。我想找到那些观察结果最为一致的样本。相同的观察结果是,两个样本之间的起始编号和结束编号都匹配。如果可能的话,我想使用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


提前感谢

这里有一些东西可以让你走:

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
df%>%
分组依据(开始、结束)%>%
总结(
样本=粘贴(唯一(样本),折叠=”),
n=长度(唯一(样本)))
#来源:本地数据帧[5 x 4]
#组:开始[?]
# 
#开始结束样本n
#        
#104C1
#2 2 4 abc 3
#3 3 6 ab 2
#4 4 8 a 1
#公元前5年10月12日

这里有一些东西可以让你继续前进:

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
df%>%
分组依据(开始、结束)%>%
总结(
样本=粘贴(唯一(样本),折叠=”),
n=长度(唯一(样本)))
#来源:本地数据帧[5 x 4]
#组:开始[?]
# 
#开始结束样本n
#        
#104C1
#2 2 4 abc 3
#3 3 6 ab 2
#4 4 8 a 1
#公元前5年10月12日

下面是一个通过base 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

final\u d这里是一个通过base 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
final\u d