我已经开始学习 R。
需要您帮助了解如何在循环中进行此计算:
C1 C2 C3
A 5 10
A 4 6
B 2 3
B 8 9
我希望输出为
C1 C2 C3 C4(c2*c3)
A 5 10 50
A 4+50=54 6 54*6= 324
B 2 3 6
B 8+6=14 9 14*9 = 126
对于列 C1 中的每个不同值,应将在 C4 处计算的值添加到 C2 处的新行值中。
最佳答案
一 dplyr
可能是:
df %>%
group_by(C1) %>%
mutate(C4 = (C2 + lag(C2 * C3, default = 0)) * C3,
C2 = C2 + lag(C2 * C3, default = 0))
C1 C2 C3 C4
<chr> <dbl> <int> <dbl>
1 A 5 10 50
2 A 54 6 324
3 B 2 3 6
4 B 14 9 126
或使用
data.table
(由@markus):setDT(df)[, `:=`(C4 = (C2 + shift(C2 * C3, fill = 0)) * C3,
C2 = C2 + shift(C4, fill = 0)), by = C1]
关于逐行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56898240/