用下一个非零值替换数据框中的零值的R语言操作

5

我有一个包含零值的列的数据框:

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

感谢您的帮助。
1个回答

8

这里有一种使用zoona.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

2
另一种变化:na.locf(with(df, replace(b,b==0,NA)), fromLast = TRUE) - thelatemail

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接