R用下一个非零值替换数据帧中的零

R用下一个非零值替换数据帧中的零,r,replace,R,Replace,我有一个数据框,其中一列包含零值: a <- 1:10 b <- c(1, 0, 0, 0, 0, -1, -1, 0, 0, 1) df <- data.frame(a, b) df 谢谢您的帮助。这里有一种方法可以使用zoo中的na.locf。虽然在这个过程中,这个方法确实将一些值更改为NA,但是代码很好而且没有痛苦 library(zoo) na.locf(with(df, ifelse(b == 0, NA_real_, b)), fromLast = TRUE) #

我有一个数据框,其中一列包含零值:

a <- 1:10
b <- c(1, 0, 0, 0, 0, -1, -1, 0, 0, 1)
df <- data.frame(a, b)
df

谢谢您的帮助。

这里有一种方法可以使用
zoo
中的
na.locf
。虽然在这个过程中,这个方法确实将一些值更改为
NA
,但是代码很好而且没有痛苦

library(zoo)
na.locf(with(df, ifelse(b == 0, NA_real_, b)), fromLast = TRUE)
# [1]  1 -1 -1 -1 -1 -1 -1  1  1  1
另一种可能比长向量上的ifelse更快的方法是

na.locf(with(df, { is.na(b) <- b == 0; b }), fromLast = TRUE)
# [1]  1 -1 -1 -1 -1 -1 -1  1  1  1

na.locf(带有(df,{is.na(b)和另一个变体:
na.locf(带有(df,replace(b,b==0,na)),fromLast=TRUE)
na.locf(with(df, { is.na(b) <- b == 0; b }), fromLast = TRUE)
# [1]  1 -1 -1 -1 -1 -1 -1  1  1  1