【发布时间】:2016-06-29 12:54:12
【问题描述】:
我有以下向量:
v <- c(2L, 2L, NA, NA, NA, NA, 8L, NA)
如何将缺失值替换为上一个系列的值 + 1,使其变为:
c(2L, 2L, 3L, 3L, 3L, 3L, 8L, 9L)
【问题讨论】:
-
你是search 还是尝试一下?
-
package
zoo有相应的工具
标签: r
我有以下向量:
v <- c(2L, 2L, NA, NA, NA, NA, 8L, NA)
如何将缺失值替换为上一个系列的值 + 1,使其变为:
c(2L, 2L, 3L, 3L, 3L, 3L, 8L, 9L)
【问题讨论】:
zoo 有相应的工具
标签: r
如前所述,zoo 有一个 last-observation-carried-forward 函数。我们可以添加一个:
library(zoo)
v2 <- na.locf(v)
v2[is.na(v)] <- v2[is.na(v)] + 1L
#[1] 2 2 3 3 3 3 8 9
【讨论】:
ifelse(is.na(v), na.locf(v) + 1L, v)
cummax(pmax(pmin(v, lag(v)+1, na.rm=TRUE), 0, na.rm=TRUE))
它既不漂亮也不高效,但它得到了你想要的答案。希望其他人能够发布一些更好的代码,但这应该可以帮助您入门。
v <- c(2L, 2L, NA, NA, NA, NA, 8L, NA)
last <- NA
vec <- vector()
for (i in 1:length(v)) {
cur <- v[i]
if (! is.na(cur) ) {
val <- cur
last <- cur
}
else val <- last + 1
vec[i] <- val
}
vec
【讨论】: