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

时间:2016-09-14 08:32:16

标签: r

我想制作现有的矢量尺寸n并使用NA。我知道我可以像这样填充矢量的末尾:

v1 <- 1:10
v2 <- diff(v1)
length(v2) <- length(v1)
v2
# 1 1 1 1 1 1 1 1 1 NA 

但我希望在初学时填充NA而不是泛型方式。我的意思是这个特殊的例子我可以

v2 <- c(NA, diff(v1))
# NA 1 1 1 1 1 1 1 1 1 

但是我希望有一些基本的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

3 个答案:

答案 0 :(得分:5)

Box1:<br> <select name="country" class="field-select"> <option value="selected">Options</option> <option value="Color">Color</option> <option value="Food">Food</option> </select> Box2:<br> <select name="item" class="field-select"> <option value="Red">Red</option> <option value="Orange">Orange</option> <option value="Yellow">Yellow</option> <option value="Apple">Apple</option> <option value="Banana">Banana</option> <option value="Watermelon">Watermelon</option> </select> 中的一个选项diff也有zoo

na.pad

答案 1 :(得分:4)

假设class Foo { func bar() -> () { let bundle = Bundle(for: type(of: self)) // ... } } 具有所需长度且v1更短(或相同长度),则这些左边的v2v2NA的长度为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) 来修改它们以进行更广泛的工作。

v1

第四是最短的。除了NA乘以rev值之外,前两个和第四个不涉及任何显式算术计算。第二个可能很慢,因为它涉及两个{{1}}的应用程序。

答案 2 :(得分:0)

将nrValues定义为您可以使用的v2开头所需的元素数量:

n <- length(v1) v2 <- c(rep(NA,nrValues),v1[nrValues:n])

我不熟悉这样做的功能,所以如果你打算多次这样做,我会创建你自己的功能。