gpt4 book ai didi

r - 如何模仿新行的拖动功能(例如在 Excel 中但在 R 中)?

转载 作者:行者123 更新时间:2023-12-04 19:55:03 24 4
gpt4 key购买 nike

我对 lead()lag() 感到有些不安,它们不会为每个填充的行动态/顺序拖动。

我的愿望是根据初始值填充新行,然后根据先前填充的行顺序填充下一行。在 Excel 中,这可以通过在单元格中陈述公式/函数并拖动它来完成。我如何在 R 中做到这一点?

参见下面的示例

       x     y     z
<dbl> <dbl> <dbl>
1 1 1 1
2 2 3 NA
3 3 5 NA
4 4 7 NA
5 5 9 NA
6 6 11 NA
7 7 13 NA
8 8 15 NA
9 9 17 NA
10 10 19 NA

所需的输出遵循此计算,其中 t-1 是先前值的下标:Z = Z_t-1 + X_t-1 - Y_t-1

期望的输出

       x     y     z
<dbl> <dbl> <dbl>
1 1 1 1
2 2 3 1
3 3 5 0
4 4 7 -2
5 5 9 -6
6 6 11 -12
7 7 13 -18
8 8 15 -25
9 9 17 -33
10 10 19 -42

最佳答案

请注意,您问题中所需的结果与您描述的公式的输出不匹配。

在这种特定情况下,您可以使用cumsum(累积和)得到答案:

cumsum(df1$x - df1$y + 1)
[1] 1 1 0 -2 -5 -9 -14 -20 -27 -35

但是,一般来说,如果您希望根据先前结果的输出递归地应用函数,则需要编写一个循环来执行此操作(或使用使用循环的函数) “under the hood”,如 akrun 使用 accumulate 显示的那样)。实现您的结果的基本 R 中的一个简单循环将是:

for(i in 2:nrow(df1)) df1$z[i] <- df1$z[i-1] + df1$x[i-1] - df1$y[i-1] 

df
#> x y z
#> 1 1 1 1
#> 2 2 3 1
#> 3 3 5 0
#> 4 4 7 -2
#> 5 5 9 -5
#> 6 6 11 -9
#> 7 7 13 -14
#> 8 8 15 -20
#> 9 9 17 -27
#> 10 10 19 -35

当您可以使用像 cumsum 这样的函数(使用基于 C 的向量化而不是 R 中的循环)时,它可能是一个更有效的解决方案。

关于r - 如何模仿新行的拖动功能(例如在 Excel 中但在 R 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69529358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com