使用seq vectorwise

时间:2017-01-04 15:06:20

标签: r data.table vectorization seq

我想创建一个列,其中包含从数据表中的起始向量到endvector的所有整数的列表。

有没有办法使用seq矢量?类似的东西:

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

这将在DT中给我一个类似的列(到目前为止不考虑列表包装):

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

更普遍的问:我认为没有简单的方法将函数转换为它的矢量化版本? 当一个(向量)变量表示一行中的单个值以及当它用作函数参数时它代表其完整向量时,我仍然不能完全理解。

2 个答案:

答案 0 :(得分: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 :(得分: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