如何压缩非顺序整数?

时间:2019-05-22 08:57:04

标签: r

我正在尝试将非顺序数字压缩为子单元型数据。我可以手动完成,但是鉴于我还有数百个工作要做,我宁愿不要,如果有其他选择

class(haplotype1[[1]])
#[1] "integer"

haplotype1[[1]]
#[1]  1  2  3  4  5  7  8  9 10 11

我想获得[1:5, 7:11],这似乎很简单,但是我没有找到完全符合我的问题的解决方案

谢谢!

3 个答案:

答案 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