如何填充向量中的值?

Ken*_*eid 4 r vector

我的R中的向量包含很多0和一些非零数字.每个向量都以非零数字开头.

例如<1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0>

我想将所有零设置为等于最近的非零数字.

即这个向量将变为<1,1,1,1,1,1,2,2,2,2,2,2,4,4,4,4>

我需要为大约100个向量执行此操作,每个向量包含大约600万个条目.目前我正在使用for循环:

for(k in 1:length(vector){

  if(vector[k] == 0){

    vector[k] <- vector[k-1]
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有更有效的方法来做到这一点?

谢谢!

李哲源*_*李哲源 7

一个选项,将取代那些0NA,然后使用zoo::na.locf:

x <- c(1,0,0,0,0,0,2,0,0,0,0,0,4,0,0,0)
x[x == 0] <- NA
zoo::na.locf(x)  ## you possibly need: `install.packages("zoo")`
# [1] 1 1 1 1 1 1 2 2 2 2 2 2 4 4 4 4
Run Code Online (Sandbox Code Playgroud)

感谢Richard向我展示了如何使用replace,

zoo::na.locf(replace(x, x == 0, NA))
Run Code Online (Sandbox Code Playgroud)