Как сжать непоследовательные целые числа?

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

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

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

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

Спасибо!

Что означает уплотнить непоследовательные числа для подмножества данных гаплотипа?

Sotos 22.05.2019 10:59

Привет :-) часть "уплотнить непоследовательные числа" - это действительно то, что меня интересует

Zaynab 22.05.2019 11:01
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
2
44
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Используя 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"

Спасибо за быстрый ответ! :-)

Zaynab 22.05.2019 11:22

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

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"

Спасибо! Попробую на ходу! :-)

Zaynab 22.05.2019 11:21

Может быть, вы хотите что-то вроде этого?

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

Другие вопросы по теме