gpt4 book ai didi

r - 使用 data.frame 中上面的行和另一列计算值

转载 作者:行者123 更新时间:2023-12-03 04:06:38 25 4
gpt4 key购买 nike

嗨,我想在 R 中做一些看起来应该很简单的事情,但我似乎大脑衰退了。

对于 data.frame 中的每一行,我想获取上面行中 Vol 的值,为该行添加 In 值并减去依赖于的值这个值。

这是我的尝试,但滞后只是向后查找一行以查找开始时的值,而不是在计算出下一个值后继续向后查找

library(dplyr)
df <- data.frame(In = c(1,4,0,0,1,2,3,0,0), Vol = c(1,rep(NA,8)))

df %>% mutate(Vol = (lag(Vol) + In) - (lag(Vol) + In)*0.01)

期望的输出=

  In     Vol
1 1 1.00
2 4 4.95
3 0 4.90
4 0 4.85
5 1 5.79
6 2 7.72
7 3 10.61
8 0 10.50
9 0 10.40

最佳答案

这是一个使用 purrr 包中的 accumulate 的解决方案。 Accumulate 函数可以将带有两个参数(例如 x 和 y)的函数应用于向量序列。返回值将成为下一轮的输入值。

在下面的示例中,我要求 accumulate 函数从 In 列的第二个数字开始到末尾。我还向 .init 参数提供了 1,这将是函数的第一个 x

library(dplyr)
library(purrr)

df <- data.frame(In = c(1,4,0,0,1,2,3,0,0), Vol = c(1,rep(NA,8)))

df %>%
mutate(Vol = accumulate(In[2:n()], function(x, y) (x + y) * 0.99, .init = 1))
# In Vol
# 1 1 1.000000
# 2 4 4.950000
# 3 0 4.900500
# 4 0 4.851495
# 5 1 5.792980
# 6 2 7.715050
# 7 3 10.607900
# 8 0 10.501821
# 9 0 10.396803

此外,Vol 列中的第一个值似乎与 In 列中的第一个值相同。如果您想要做的只是在In列上累积过程,那么以下代码会更简洁,您甚至不需要复制第一个值到 Vol 列。

df %>% 
mutate(Vol = accumulate(In, function(x, y) (x + y) * 0.99))
# In Vol
# 1 1 1.000000
# 2 4 4.950000
# 3 0 4.900500
# 4 0 4.851495
# 5 1 5.792980
# 6 2 7.715050
# 7 3 10.607900
# 8 0 10.501821
# 9 0 10.396803

关于r - 使用 data.frame 中上面的行和另一列计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55446372/

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