如何从前面填充NA的矢量?

ece*_*ulm 4 r

我想制作一个现有的矢量大小n并使用NA.我知道我可以像这样填充矢量的末尾:

v1 <- 1:10
v2 <- diff(v1)
length(v2) <- length(v1)
v2
# 1 1 1 1 1 1 1 1 1 NA 
Run Code Online (Sandbox Code Playgroud)

但我想以一般方式填写NA初学者.我的意思是这个特殊的例子我可以

v2 <- c(NA, diff(v1))
# NA 1 1 1 1 1 1 1 1 1 
Run Code Online (Sandbox Code Playgroud)

但我希望有一些基本的R函数或库提供类似的东西 v2 <- pad(v2, n=length(v1), value=NA)

有什么类似我可以使用自我或我需要定义自己的功能:

pad  <- function(x, n) { # ugly function that doesn't keep the attributes of x
    len.diff <- n - length(x)
    c(rep(NA, len.diff), x) 
}

pad(1:10, 12) # NA NA 1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)

G. *_*eck 7

假设v1具有所需的长度和v2更短(或相同的长度),这些左垫v2NA值的长度v1。前四个假定数字向量,尽管它们可以通过NA*v1在代码中替换为rep(NA, length(v1)).

replace(NA * v1, seq(to = length(v1), length = length(v2)), v2)

rev(replace(NA * v1, seq_along(v2), rev(v2)))

replace(NA * v1, seq_along(v2) + length(v1) - length(v2), v2)

tail(c(NA * v1, v2), length(v1))

c(rep(NA, length(v1) - length(v2)), v2)
Run Code Online (Sandbox Code Playgroud)

第四个是最短的。前两个和第四不涉及比乘以其他任何明确的数学计算v1NA价值。第二个可能很慢,因为它涉及rev.


akr*_*run 5

一种选择也是diff从中zoo获得的na.pad

library(zoo)
as.vector(diff(zoo(v1), na.pad=TRUE))
#[1] NA  1  1  1  1  1  1  1  1  1
Run Code Online (Sandbox Code Playgroud)