逐行计算

标签 r

我已经开始学习 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/

相关文章:

r - 如何从lm结果中获取RMSE?

r - 将行添加到列表中的矩阵中,以便所有矩阵都具有相同顺序的统一行数

r - 将带有 basemap 的 tmap 保存为图像?

r - 让用户在 Shinydashboard 应用程序中创建不同的按钮操作

r - 我可以调整 scale_color_brewer 的下限吗?

r - 使用布局函数在 r 中绘制多个栅格

R github 包 w/devtools : warning unknown macro '\item'

r - R 中的 "Embedded"data.frame。它是什么,它叫什么,为什么它的行为方式如此?

r - 使用不同长度的向量与 tidyr 分开

r - "Vectorized"矩阵乘法