如果R中有0,如何填写"后续"数字?

wen*_*wen 0 replace numbers r sequence

我有一串数字:

n1 = c(1, 1, 0, 6, 0, 0, 10, 10, 11, 12, 0, 0, 19, 23, 0, 0)
Run Code Online (Sandbox Code Playgroud)

我需要将0与相应的数字替换为"后面"以获得,同时将0留在尾部(因为它们背后没有任何东西):

n2 = c(1, 1, 6, 6, 10, 10, 10, 10, 11, 12, 19, 19, 19, 23, 0, 0)
Run Code Online (Sandbox Code Playgroud)

我如何从n1到n2?

这似乎比我之前提到的问题要难得多:

如果R中有0,如何填写前面的数字?

flodel提出了一个优雅的解决方案:

n2 <- n1[cummax(seq_along(n1) * (n1 != 0))]
Run Code Online (Sandbox Code Playgroud)

但是,这个解决方案在这里不起作用; 我已经尝试但未能调整代码.

别人能想出一个优雅的解决方案吗?

提前致谢!

Mat*_*erg 5

如果你没有NA在矢量中,你可以使用na.locfzoo:

n1[n1==0] <- NA
n2 = na.locf(n1, na.rm=FALSE, fromLast=TRUE)
n2[is.na(n2)] <- 0
n2
## [1]  1  1  6  6 10 10 10 10 11 12 19 19 19 23  0  0
Run Code Online (Sandbox Code Playgroud)