2017-01-04 55 views
2

我想創建一個列表,包含從數據表中的起始向量到結束向量的所有整數列表。使用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列(不考慮列表包裹UPS至今):

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()'運行,是的,它是一樣的 –