Как сжать непоследовательные целые числа? - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь сжать непоследовательные числа для поднабора данных гаплотипа.Я мог бы сделать это вручную, но, учитывая, что у меня есть сотни дел, я бы предпочел, чтобы не было альтернативы

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

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

Я хочу получить [1:5, 7:11], что кажется простым, но у меня нетне нашел решение, точно соответствующее моей проблеме

Спасибо!

Ответы [ 3 ]

0 голосов
/ 22 мая 2019

Неясно, какой тип объекта вы хотите создать. Я бы просто сохранил начальные и конечные значения.

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"
0 голосов
/ 22 мая 2019

Может быть, вы хотите что-то подобное?

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
0 голосов
/ 22 мая 2019

Использование 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...