【问题标题】:Do loops by group in R在R中按组循环
【发布时间】:2019-04-16 12:32:21
【问题描述】:

新手问题。我有一个数据集,用于计算一些会计价值。数据集如下所示


    ID   Period   Amount Interest O_Bal   C_Bal
    1     1        1234    0.07     1234  (1234+(1234*0.07)) = 1321
    1     2        1244    0.07     1321  (1321-1234+(1321*0.07))
    1     3           .....
    2     1            ......

...

请忽略表格中的实际值。我现在拥有的是每个 ID 的第一行。我需要为每个 ID 组创建一个循环,以便从第 2 期开始,它根据第二行中的公式计算期末余额。有什么想法吗?

我已经尝试了以下

   fin_calc$C_Bal = fin_calc$O_Bal + (fin_calc$O_Bal*0.07)

if (fin_calc$Period==1) {
  fin_calc$Cl_Bal = fin_calc$C_Bal
}

fin_c <- fin_calc %>%
  group_by(ID) %>%
  mutate(Cl_Bal = lag(Cl_Bal) - Amount_PA + (lag(Cl_Bal) - Amount_PA)*0.07)

这样做是因为它能够从周期 1 继续到周期 2,但随后的周期计算不正确

 Data <- data.frame(
    ID = 1,
    Period = c(1,2,3),
    Amount_PA = c(0,2946737,3035139),
    O_Bal = c(30979981.5,0,0),
    C_Bal = c(33148580.2,0,0),
    Cl_Bal = c(33148580.2,32221382.2,-3345026.6)

  )

【问题讨论】:

  • See here 提出一个人们可以帮助解决的 R 问题。这包括我们可以使用的数据样本、所有必要的代码,以及对您正在尝试做什么和什么没有奏效的清晰说明。
  • 道歉。问题已更新。
  • 这仍然不是我们可以使用的数据
  • 好的。更新。希望这是适合数据的格式。

标签: r loops dplyr


【解决方案1】:

如果像您说的那样,您拥有所有 ID 的第一行,并且所有 ID 都遵循完全相同的模式,也许您可​​以尝试:

library(dplyr)
df%>%
group_By(ID)%>%
mutate(Closing_Bal = ifelse(is.na(lag(Opening_Bal),
Opening_Bal + (Opening_bal*Interest),
Opening_Bal - lag(Opening_Bal) + (Opening_bal*Interest))))

编辑:

df <- df %>%
  group_by(ID)%>%
  mutate(Cl_Bal = lag(Cl_Bal) - Amount + (lag(Cl_Bal) - Amount)*0.07) %>% 
  mutate(Cl_Bal = ifelse(Cl_Bal < 0,lag(Cl_Bal) - Amount + (lag(Cl_Bal) - Amount)*0.07,Cl_Bal))

【讨论】:

  • 感谢亚伦。我仍在努力让它发挥作用。已更新我的原始问题以显示问题。
  • @user2641784 我认为问题出在这样一个事实,即您计算所依据的列在计算时不存在(它选择的值为 0),这给出了错误的结果
  • 谢谢@Aaron。但这仍然没有奏效。我有 2 个周期被正确计算,但随后的周期是负数
猜你喜欢
  • 2017-05-10
  • 2020-05-05
  • 2014-04-09
  • 2019-04-24
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
相关资源
最近更新 更多