这是我的代码的片段:
m <- as.data.frame.matrix(matrix(c(20, 32, 52, 84, 98, 101), ncol = 2, nrow = 3))
ages <- as.numeric()
for(i in 1:nrow(m)){
ages <- c(ages, c(m$V1[i]:m$V2[i]))
}
基本上,第一列是开始年龄,第二列是结束年龄。我正在尝试将每个人从头到尾的每个年龄都添加到列表中。不幸的是,这非常慢,因为我有大约一百万个观测值,并且我正在寻找一种优化方法。
答案 0 :(得分:2)
我们可以使用mapply
并在两列之间创建顺序
unlist(mapply(`:`, m$V1, m$V2))
#[1] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37..
#[29] 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65..
#[57] 76 77 78 79 80 81 82 83 84 32 33 34 35 36 37 38 39 40..
#[85] 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68..
#[113] 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96..
#[141] 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 ..
#[169] 88 89 90 91 92 93 94 95 96 97 98 99 100 101
答案 1 :(得分:1)
这里是使用pmap
library(purrr)
library(dplyr)
set_names(m, c('from', 'to')) %>%
pmap(., seq) %>%
unlist
或使用Map
中的base R
unlist(do.call(Map, c(f = `:`, m)))