tags:

views:

219

answers:

1

I have two vectors in R of different size, and I want to add them, but without repeating the shorter one - instead, I want the "missing" numbers to be zeroes.

Example:

x<-c(1,2)
y<-c(3,4,5)
z<-x+y 

Now, z is 4 6 6, but I want it only 4 6 5.

+8  A: 

I would make them equal length then add them:

> length(x) <- length(y)
> x
[1]  1  2 NA
> x + y
[1]  4  6 NA
> x[is.na(x)] <- 0
> x + y
[1] 4 6 5

Or, as a function:

add.uneven <- function(x, y) {
    l <- max(length(x), length(y))
    length(x) <- l
    length(y) <- l
    x[is.na(x)] <- 0
    y[is.na(y)] <- 0
    x + y
}

> add.uneven(x, y)
[1] 4 6 5

Given that you're just adding two vectors, it may be more intuitive to work with it like this:

> `%au%` <- add.uneven
> x %au% y
[1] 4 6 5

Here's another solution using rep:

x <- c(x, rep(0, length(y)-length(x)))
x + y
Shane