这是此问题的后续内容:data.table efficient recycling
这里的区别是每行的未来年份不一定相同。.
例如,当我需要对未来几年进行预测时,我经常在data.table中使用回收。每年以后我都会重复原始数据。
这可能会导致类似的结果:
library(data.table)
dt <- data.table(cbind(1:500000, 500000:1, rep(rpois(500000, 240))))
dt2 <- dt[, c(.SD, .(year = 1:V3)), by = 1:nrow(dt) ]
但是我经常不得不处理数百万行,并且比这个玩具示例中的列要多得多。时间增加了..试试这个:
library(data.table)
dt <- data.table(cbind(1:5000000, 5000000:1, rep(rpois(5000000, 240))))
dt2 <- dt[, c(.SD, .(year = 1:V3)), by = 1:nrow(dt) ]
我的问题是:有没有更有效的方法来实现这一目的?
感谢您的帮助!
这是一个较快的实现,但是由于lapply
中的data.table
循环而仍然很长
years <- rpois(5000000, 240)
dt3 <- data.table(
rep(1:5000000, years),
rep(5000000:1, years),
rep(years, years),
unlist(lapply(years, function(year){1:year}))
)
我希望这对您有帮助!