首页 > 解决方案 > 随着时间的推移计算具有起源和演变的数值特征

问题描述

我有 2 个输入数据框:

origin <- data.frame("year"=2017,"a"=5,"b"=2)
evolutions <- data.frame("year"=c(2018,2019,2020),"a"=c(1.2,1.5,2),"b"=c(0.5,2,2))

我需要的是恢复每个时期的数字特征的值

output <- data.frame("year"=c(2017,2018,2019,2020),"a"=c(5,6,9,18),"b"=c(2,1,2,4))

看起来很简单,我基本上需要逐步将起源乘以进化。但是,我找不到有效的方法来做到这一点:目前我正在使用 for 循环进行循环,但我对此并不满意。任何想法 ?任何包解决方案(dplyrdata.table甚至base)都会很棒。

谢谢 !

标签: rdplyrdata.table

解决方案


遵循评论中@Henrik 的提议,这里有一个解决方案,在 colnames 上有一个循环,假设 date 位于第一个位置并且两个输入共享相同的 colnames :

output <- data.frame("year" = c(origin$year, evolutions$year),
                     sapply(colnames(origin)[-1], function(x) cumprod(c(origin[[x]], evolutions[[x]]))))

推荐阅读