使用 seq vectorwise

Using seq vectorwise

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

有没有办法使用 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

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

您可以简单地使用 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

当您尝试将一个函数应用于多个向量的相应元素或您的列时,它会派上用场。

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