ecerulm - 1 year ago 91
R Question

# How can I pad a vector with NA from the front?

I want to make an existing vector size

`n`
and use
`NA`
. I know I can pad at the end of the vector like so:

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

But I want to fill the
`NA`
at the beginnning instead in a generic way. I mean for this particular example I can just

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

But I was hoping that there exist some base R function or library that provides something like
`v2 <- pad(v2, n=length(v1), value=NA)`

Is there anything like that I can use off the self or do I need to define my own function:

``````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
``````

Assuming `v1` has the desired length and `v2` is shorter (or the same length) these left pad `v2` with `NA` values to the length of `v1`. The first four assume numeric vectors although they can be modified to also work more generally by replacing `NA*v1` in the code with `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)
``````

The fourth is the shortest. The first two and fourth do not involve any explicit arithmetic calculations other than multiplying `v1` with `NA` values. The second is likely slow since it involves two applications of `rev`.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download