我有一个包含零值的列的数据框:
a <- 1:10
b <- c(1, 0, 0, 0, 0, -1, -1, 0, 0, 1)
df <- data.frame(a, b)
df
Run Code Online (Sandbox Code Playgroud)
如何将零值替换为最后一个非零值,即列df $ b为:
1,-1,-1,-1,-1,-1,-1,1,1,1
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
这里有一个方法na.locf从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
Run Code Online (Sandbox Code Playgroud)
对此的替代方案,可能比ifelse长向量更快的方法是
na.locf(with(df, { is.na(b) <- b == 0; b }), fromLast = TRUE)
# [1] 1 -1 -1 -1 -1 -1 -1 1 1 1
Run Code Online (Sandbox Code Playgroud)