假设我有一个大的data.table,大约有1000列和100,000行,如下所示:
dt <- data.table(col1 = runif(10^4))
for (i in 2:10^3) set(dt, j = paste('col', as.character(i), sep = ''), value = dt[[i-1]] * 0.95^(i-1))
可以把这些看作是“每日死亡率”。我想计算每月的存活率,所以我有以下代码块:
dt[, paste0('surv_rate_', 1:10^3) := Reduce('*', (1-dt[, paste0('col', 1:10^3)])^30, accumulate = T)]
我无法找到任何基准上的行明智的累积产品,如上图所示。
你能想到任何更好/更干净/更快的方法来用data.table的方式做这件事吗?
(我也想到了as.data.table(t(cumprod(t(dt)))
,但对于这种大小的表,这似乎要花很长时间)
1条答案
按热度按时间mbjcgjjk1#
正如注解中提到的,另一种可能的解决方案是在行沿着使用
apply
:但是,您的解决方案仍然快30%: