2010-02-21 5 views
7

У меня есть два вектора в R разного размера, и я хочу их добавить, но без повторения более короткого - вместо этого я хочу, чтобы «отсутствующие» числа были нулями.Как добавить два вектора без повторения в R?

Пример:

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

Теперь z является 4 6 6, но я хочу это только 4 6 5.

+0

Как предупреждение при работе с неравными векторами длины: вы должны быть уверены, что они выстраиваются в линию. Если вы не можете быть уверены в этом, тогда я бы посоветовал другой подход (например, найти какой-то ключ). – Shane

ответ

12

Я хотел бы сделать их одинаковой длины, то добавьте их:

> 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 

Или, как функция:

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 

Учитывая, что вы просто добавить два вектора, это может быть более интуитивным работать с ним, как это:

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

Вот еще одно решение с использованием респ:

x <- c(x, rep(0, length(y)-length(x))) 
x + y 
Смежные вопросы