我想制作一个现有的矢量大小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)
假设v1具有所需的长度和v2更短(或相同的长度),这些左垫v2与NA值的长度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)
第四个是最短的。前两个和第四不涉及比乘以其他任何明确的数学计算v1与NA价值。第二个可能很慢,因为它涉及rev.
一种选择也是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)