使用 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
我想创建一个列,其中包含数据表中从起始向量到结束向量的所有整数列表。
有没有办法使用 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