gpt4 book ai didi

r - 迭代数据帧,其中每次迭代都有效地依赖于 R 中的前一项

转载 作者:行者123 更新时间:2023-12-04 10:34:22 25 4
gpt4 key购买 nike

我有一个包含两个长度为 5 和变量的向量的数据框:

x <- seq(1:5)
y <- rep(0,5)
df <- data.frame(x, y)
z <- 10

我需要遍历数据框并根据与 x 相关的条件使用 z 更新 y,并且我需要在每次迭代时更新 z。使用 for 循环,我会这样做:
for (i in seq(2,nrow(df))){
if(df$x[i] %% 2 == 0){
df$y[i] <- df$y[i-1] + z
z <- z - df$x[i]
} else{
df$y[i] <- df$y[i-1]
}
}

使用数据帧很慢,并且必须使用 df$x[i] 访问第 i 个项目效率不高,但我不确定如何对其进行矢量化,因为 y 和 z 都会根据每次迭代而改变。

有没有人建议最好的方法来迭代这个?我希望完全避免数据帧,只使用向量来简化查找,或者使用 tidyverse 中的一些东西,使用 tibbles 和 purrr 包,但似乎没有什么容易实现的。谢谢!

最佳答案

您可以使用 sapply功能:

y=0
z=10
sapply(df$x,function(x)ifelse(x%%2==0,{y<<-y+z;z<<-z-x;y},y<<-y))
[1] 0 10 10 18 18

关于r - 迭代数据帧,其中每次迭代都有效地依赖于 R 中的前一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48695732/

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