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