我有按样本分组的观察列表。我想找到共享最相同观察结果的样本。相同的观察结果是两个样本之间的起始和结束编号都匹配。如果可能的话,我想使用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
等
提前致谢
答案 0 :(得分:1)
这里有一些可以帮助你的事情:
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
答案 1 :(得分: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