【发布时间】:2023-03-06 10:58:02
【问题描述】:
我正在尝试使用library(financial) 计算来自data.table 格式的给定现金流的每个观察值的净现值 (NPV)。这是我的现金流:
library(data.table)
dt <- data.table(id=c(1,2,3,4), Year1=c(NA, 30, 40, NA), Year2=c(20, 30, 20 ,70), Year3=c(60, 40, 0, 10))
计算 NPV 并在 data.table 中更新,
library(financial)
npv <- apply(dt, 1, function(x) cf(na.omit(x[-1]), i = 20)$tab[, 'NPV'])
dt[, NPV:=npv]
返回,
id Year1 Year2 Year3 NPV
1: 1 NA 20 60 70.00000
2: 2 30 30 40 82.77778
3: 3 40 20 0 56.66667
4: 4 NA 70 10 78.33333
如何使用函数 cf 将结果直接更新到 data.table 中的每一行?
仅供参考:在我的真实数据集中,有超过 50 列
【问题讨论】:
-
也许
dt[, "NPV" := apply(dt, 1, function(x) cf(na.omit(x[-1]), i = 20)$tab[, 'NPV'])]??这是你想要的吗? -
或者
dt[, NPV := cf(na.omit(c(Year1, Year2, Year3)), i=20)$tab[, 'NPV'], by=1:nrow(dt)]`
标签: r data.table