2017-01-04 12 views
2

Я хотел бы создать столбец со списками всех целых чисел от стартового вектора к endvector в datatable.Использование seq vectorwise

Есть ли способ использования seq vectorwise? Что-то вроде:

library(data.table) 
Startpoints <- seq(1,11,5) 
Endpoints <- seq(5,15,5) 
DT <- data.table(Startpoints, Endpoints) 
DT[, sequences := seq(Startpoints, Endpoints, 1)] 

которого Idealy дал бы мне колонку, как, что в DT (не считая список-обруч взлетов до сих пор):

sequences 
1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 

В более общем спросил: Я полагаю, что нет никакого легкого способ преобразования функции в ее векторизованную версию? Я все еще не совсем понимаю, когда переменная (вектор) представляет одно значение из одной строки и когда она обозначает полный вектор, когда используется как аргумент функции.

ответ

3

Вы могли бы просто использовать Map:

DT[,sequences := Map(":", Startpoints, Endpoints)] 
# Startpoints Endpoints  sequences 
#1:   1   5  1,2,3,4,5 
#2:   6  10 6, 7, 8, 9,10 
#3:   11  15 11,12,13,14,15 

Это очень удобно, когда вы пытаетесь применить функцию к соответствующим элементам множества векторов, или в вашем случае столбцы.

1
DT[, .(seq = paste0(Startpoints:Endpoints, collapse = ",")), 
     by = c("Startpoints", "Endpoints")] 
# Startpoints Endpoints   seq 
#1:   1   5  1,2,3,4,5 
#2:   6  10  6,7,8,9,10 
#3:   11  15 11,12,13,14,15 

library(dplyr) 
DT %>% group_by(Startpoints, Endpoints) %>% mutate(seq = paste0(Startpoints:Endpoints, collapse = ",")) 

# Startpoints Endpoints   seq 
#1   1   5  1,2,3,4,5 
#2   6  10  6,7,8,9,10 
#3   11  15 11,12,13,14,15 
+1

@Frank спасибо ... я не знаю этой функции. Я только что начал с 'toString()' и да, это то же самое –