我有一个包含零值的数据框:
a <- 1:10
b <- c(1, 0, 0, 0, 0, -1, -1, 0, 0, 1)
df <- data.frame(a, b)
df
如何将零值替换为最后一个非零值,即列df $ b为:
1,-1,-1,-1,-1,-1,-1,1,1,1
感谢您的帮助。
答案 0 :(得分:8)
这是来自na.locf
的{{1}}的一种方式。虽然这个方法确实在过程中将某些值更改为zoo
,但代码很好且无痛。
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