Учитывая большой вектор. Например:
set.seed(1)
in_vec <- sample(1:10000, 5000, replace = F)
Как я могу эффективно свернуть это в таблицу данных, которая обеспечивает начальную и конечную координаты для всех последовательных целых чисел. В настоящее время я использую следующий код:
in_vec <- sort(in_vec) # sort by sequence
library(data.table)
interval_id <- findInterval(in_vec, in_vec[which(c(1, diff(in_vec)) > 1)]) # add unique IDs for sequences
dt <- data.table(vec = in_vec, # make data.table
int_id = interval_id)
long_to_short <- function(sub){ data.table(start = sub$vec[1], end = sub$vec[nrow(sub)]) } # custom function
library(plyr)
output <- ddply(dt, "int_id", long_to_short)
output$int_id <- NULL
Однако вектор, к которому я применяю это, очень велик, и поэтому мне необходимо максимизировать производительность. Есть ли метод data.table? Любая помощь будет принята с благодарностью!