我有一个包含零值的列的数据框:
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
感谢您的帮助。
这里有一种使用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(with(df, replace(b,b==0,NA)), fromLast = TRUE)
- thelatemail