我在变异循环中遇到动态变量问题(我是 R 的新手)。 我有一个包含数据的数据框,我必须对每行的三个单元格和上一行的相同单元格进行一些操作。 单元格名称为 tonext1、left1 和 total_tonext1(tonext2、left2 等...) 那些最终的变量必须添加到一个新的 DF(“newdf”)
前三列还没有完成,因为它们是用另一种方式计算的,但后面的都是用同样的方式计算
我已经尝试过使用和不使用“eval()”(注释行就是一个例子)以及许多其他没有成功的事情。 而“total_tonext(i)”值是该元素之前的累计和。
你认为必须怎么做?
非常感谢,祝大家有个美好的一天!!
for(i in 2:4){
assign("actual_tonext", paste0("tonext", i))
assign("above_tonext", paste0("tonext", i-1))
assign("actual_left", paste0("left", i))
assign("above_left", paste0("left", i-1))
assign("total_tonext", paste0("total_tonext", i))
assign("variable", paste0("value", i))
newdf = final_df %>%
mutate(
#eval(actual_tonext) = lag(eval(above_tonext)) + lag(eval(above_left)) - eval(above_left),
actual_tonext = lag(above_tonext) + lag(above_left) - above_left,
actual_left = variable - actual_tonext,
total_tonext = cumsum(replace_na(actual_tonext, 0))
)
}
没有“赋值”(看清楚),for循环的第一步(i = 2):
newdf = final_df %>%
mutate(
tonext2 = lag(tonext1) + lag(left1) - left1,
left2 = value2 - tonext2,
total_tonext2 = cumsum(replace_na(tonext2, 0)),
)
这是我的数据框。隐藏“value3、4 和 5”列以使其清晰。 “tonext2”、“left2”和“total_tonext2”列是我想要的(以及 3、4...) 例如“tonext2”的“186”值为11+899-724
“王子” | “价值1” | “价值2” | “tonext1” | “左1” | “total_tonext1” | “tonext2” | “左2” | “total_tonext2” |
---|---|---|---|---|---|---|---|---|
42 | 42 | NA | NA | NA | 0 | NA | NA | 0 |
45 | 45 | 0 | 3 | 42 | 3 | NA | NA | 0 |
45 | 45 | 0 | 0 | 45 | 3 | 0 | 0 | 0 |
45 | 45 | 0 | 0 | 45 | 3 | 0 | 0 | 0 |
221 | 221 | 0 | 176 | 45 | 179 | 0 | 0 | 0 |
307 | 307 | 0 | 86 | 221 | 265 | 0 | 0 | 0 |
438 | 438 | 0 | 131 | 307 | 39 | 0 | 0 | 0 |
438 | 438 | 0 | 0 | 438 | 396 | 0 | 0 | 0 |
475 | 475 | 0 | 37 | 438 | 433 | 0 | 0 | 0 |
899 | 899 | 0 | 424 | 475 | 85 | 0 | 0 | 0 |
910 | 910 | 0 | 11 | 899 | 868 | 0 | 0 | 0 |
918 | 732 | 187 | 8 | 724 | 876 | 186 | 1 | 186 |
918 | 732 | 187 | 0 | 732 | 876 | 0 | 187 | 186 |
1018 | 829 | 190 | 100 | 729 | 976 | 3 | 187 | 189 |
1227 | 102 | 207 | 209 | 812 | 1185 | 17 | 190 | 206 |
1234 | 102 | 206 | 7 | 1021 | 1192 | 0 | 206 | 206 |
1387 | 117 | 208 | 153 | 1026 | 1345 | 2 | 206 | 208 |
2495 | 219 | 298 | 1108 | 1083 | 2453 | 96 | 202 | 304 |
2495 | 219 | 298 | 0 | 2191 | 2453 | 0 | 298 | 304 |
2495 | 218 | 302 | 0 | 2186 | 2453 | 5 | 297 | 309 |
2512 | 220 | 302 | 17 | 2186 | 2470 | 0 | 302 | 309 |