假设我有。
x <- c(1, 2, 3, 4, 5)
y <- c(2, 3, 6, 8, 10)
my.list <- list(start = x, end = y) %>% as.data.frame()
我需要定义一个新的变量,其中包含seq(start,end)或start:end存储在该变量中,我想要横跨行的数字序列,例如,1 2代表第一行,3 4 5 6代表第三行。
非常感谢
我们可以使用 map2
以获得 seq
开始"、"结束 "的相应值的影响,以创建一个 list
的 vector
s
library(dplyr)
library(purrr)
my.list %>%
mutate(new = map2(start, end, `:`))
# start end new
#1 1 2 1, 2
#2 2 3 2, 3
#3 3 6 3, 4, 5, 6
#4 4 8 4, 5, 6, 7, 8
#5 5 10 5, 6, 7, 8, 9, 10
另一种选择是 rowwise
my.list %>%
rowwise %>%
mutate(new = list(start:end))
# A tibble: 5 x 3
# Rowwise:
# start end new
# <dbl> <dbl> <list>
#1 1 2 <int [2]>
#2 2 3 <int [2]>
#3 3 6 <int [4]>
#4 4 8 <int [5]>
#5 5 10 <int [6]>
或与 data.table
正如@markus在评论中提到的
library(data.table)
setDT(my.list)[, V3 := Map(`:`, start, end)]
或与 Map
从 base R
Map(`:`, my.list$start, my.list$end)