gpt4 book ai didi

r - 用尾随行值乘以增长率填充 NA 值?

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

什么是填充 NA 的好方法值与前一个值的乘积 (1 + growth) ?

df <- data.frame(
year = 0:6,
price1 = c(1.1, 2.1, 3.2, 4.8, NA, NA, NA),
price2 = c(1.1, 2.1, 3.2, NA, NA, NA, NA)
)
growth <- .02

在这种情况下,我想要 price1 中的缺失值需填写 4.8*1.02 , 4.8*1.02^2 , 和 4.8*1.02^3 .同样,我想要 price2 中的缺失值需填写 3.2*1.02 , 3.2*1.02^2 , 3.2*1.02^3 , 和 3.2*1.02^4 .

我试过这个,但我认为它需要设置为以某种方式重复( apply ?):
library(dplyr)
df %>%
mutate(price1 = ifelse(is.na(price1),
lag(price1) * (1 + growth), price1
))

我没有使用 dplyr对于其他任何事情(还没有),所以来自基础 R 或 plyr 的东西或类似的将不胜感激。

最佳答案

它看起来像 dplyr无法处理访问新分配的滞后值。这是一个即使 NA 也应该起作用的解决方案位于一列的中间。

df <- apply(
df, 2, function(x){
if(sum(is.na(x)) == 0){return(x)}
## updated with optimized portion from @josilber
r <- rle(is.na(x))
na.loc <- which(r$values)
b <- rep(cumsum(r$lengths)[na.loc-1], r$lengths[na.loc])
lastValIs <- 1:length(x)
lastValI[is.na(x)] <- b
x[is.na(x)] <-
sapply(which(is.na(x)), function(i){
return(x[lastValIs[i]]*(1 + growth)^(i - lastValIs[i]))
})
return(x)
})

关于r - 用尾随行值乘以增长率填充 NA 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31053915/

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