【发布时间】:2021-09-01 13:36:14
【问题描述】:
我在 R 中有一个如下定义的数据框:
df <- data.frame('ID'=c(1,1,1,1),
'Month' =c('M1','M2','M3','M4'),
"Initial.Balance" =c(100,100,100,0),
"Value" = c(0.1,0.2,0.2,0.2),
"Threshold"=c(0.05,0.18,0.25,0.25),
"Intermediate.Balance"=c(0,0,100,0),
"Final.Balance"=c(100,100,0,0))
此任务使用上一行的 Final.Balance 中的 Initial.Balance(在当前行中)。
- 当 Value >= Threshold 时,Intermediate.Balance=0 且 Final.Balance = Initial.Balance-Intermediate.Balance
- 当 Value
我曾尝试使用 for 循环来完成此任务,但在大型数据集(对于许多 ID)上需要大量时间
这是我的解决方案:
for (i in 1:nrow(df)){
df$Intermediate.Balance[i] <- ifelse(df$Value[i]>df$Threshold[i],0,df$Initial.balance[i])
df$Final.Balance[i] <- df$Initial.balance[i]-df$Intermediate.Balance[i]
if(i+1<=nrow(df)){
df$Initial.balance[i+1] <- df$Final.Balance[i] }
}
我们可以使用数据表寻找类似的解决方案吗?由于数据表操作比数据帧上的 for 循环更快,我相信这将帮助我节省计算时间。
谢谢,
【问题讨论】:
标签: r data.table