【发布时间】:2019-03-24 19:16:37
【问题描述】:
我有一个包含零值列的数据框:
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
感谢您的帮助。
【问题讨论】:
我有一个包含零值列的数据框:
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
感谢您的帮助。
【问题讨论】:
这是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
对此的替代方法是
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)