R 变异和动态变量

问题描述 投票:0回答:0

我在变异循环中遇到动态变量问题(我是 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
r assign mutate
© www.soinside.com 2019 - 2024. All rights reserved.