我正在尝试将非顺序数字压缩为子单元型数据。我可以手动完成,但是鉴于我还有数百个工作要做,我宁愿不要,如果有其他选择
class(haplotype1[[1]])
#[1] "integer"
haplotype1[[1]]
#[1] 1 2 3 4 5 7 8 9 10 11
我想获得[1:5, 7:11]
,这似乎很简单,但是我没有找到完全符合我的问题的解决方案
谢谢!
答案 0 :(得分:0)
使用cumsum
创建顺序组
tapply(x, cumsum(c(TRUE, diff(x) != 1)), FUN = function(i)paste(i[1], i[length(i)], sep = ':'))
# 1 2
#"1:5" "7:11"
答案 1 :(得分:0)
尚不清楚您要创建哪种类型的对象。我只存储开始值和结束值。
x <- c(1, 2, 3, 4, 5, 7, 8, 9, 10, 11)
starts <- x[!c(FALSE, diff(x) == 1L)]
#[1] 1 7
ends <- x[!c(diff(x) == 1L, FALSE)]
#[1] 5 11
paste(starts, ends, sep = ":")
#[1] "1:5" "7:11"
答案 2 :(得分:0)
也许您想要这样的东西?
vec <- c(1, 2, 3, 4, 5, 7, 8, 9, 10, 11)
split(vec, cumsum(c(1,diff(vec)>1)))
# $`1`
# [1] 1 2 3 4 5
#
# $`2`
# [1] 7 8 9 10 11