我想替换以下 for 循环...
data <- data.frame(x = c(2, 3, 3, 4, 5, 6, 5, 5, 6, 8, 9, 7, 6, 9, 10),
y = rep(0, 15))
for (i in 2:length(data$x)) {
data$y[i] <- ifelse(data$x[i] > data$y[i-1], data$y[i-1] + 2, data$y[i-1] - 1)
}
data$y # 0 2 4 3 5 7 6 5 7 9 8 7 6 8 10
...我想使用 dplyr 并尝试了以下操作:
data %>%
mutate(y = if_else(x > lag(y), lag(y) + 2, lag(y) -1 ))
但显然我没有成功。任何帮助将不胜感激。
最佳答案
您可以使用 purrr
包中的 accumulate
进行顺序操作:
data %>%
mutate( y = accumulate( .x = x[-1],
.init = 0,
.f = function(y,x) if_else(x > y, y + 2, y - 1) )
)
关于用 map 替换 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60166490/