【发布时间】:2021-12-09 11:41:55
【问题描述】:
非常感谢您对此提供的帮助。我正在尝试压缩 200,000+ 行的数据框,其中“start”列中一行的整数与“end”列中的下一个连续行完全相同。作为参考,这些是染色体碱基对位置,以及下面的示例代码:
genomic_ranges <- data.frame(sample_ID = c("A", "B", "B", "B", "C"),
start = c(1, 20, 30, 40, 250),
end = c(5, 30, 40, 70, 400),
feature = c("normal", "DUP", "DUP", "DUP", "DUP"))
sample_ID start end feature
1 A 1 5 "normal"
2 B 20 30 "DUP"
3 B 30 40 "DUP"
4 B 40 70 "DUP"
5 C 250 400 "DUP"
我已经尝试过逻辑向量、布尔运算符、ifelse 语句、forloop 等,但我找不到一种方法来 1)删除显示中间范围的行,以及 2)将包含真正开始的第一行和最后一行粘贴在一起和范围的结束位置。
我尝试过的一些方法:
ifelse(cnv_catalogue_final$end == cnv_catalogue_final$start, "to_delete", "other"))
cnv_catalogue_final$end %in% cnv_catalogue_final$start
dplyr::filter(slice_min(start, x) | slice_max(end, x))
即使我使用像 (StartA <= EndB) and (EndA >= StartB) 这样的东西,我仍然会失去开始或结束位置。
*编辑:感谢大家的反馈!我已经用代码更新了这个问题。这些行确实具有由 sample_ID 标识的 ID。理想情况下,我希望 1 行具有 20-70 的完整范围,而不是将其切成 20-30、30-40 和 40-70 的段,分成 3 行具有相同的 sample_ID 标识符。
【问题讨论】:
-
您可能想要标记您正在使用的语言。
-
请与
dput()分享数据,避免为表分享图片。 -
请提供足够的代码,以便其他人更好地理解或重现问题。
-
中间范围是什么意思?这些行有 ID 吗?
标签: r duplicates range collapse