如何在R中将两个向量相加而不重复?

9

我有两个不同大小的R向量,我想把它们相加,但是不重复较短的向量——相反,我希望“缺失”的数字变成零。

例如:

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

现在,z的值为4 6 6,但我希望将其变为4 6 5

当处理长度不相等的向量时,请注意:您需要确保它们对齐。如果您不能确定,那么我建议采用不同的方法(例如查找某种键)。 - Shane
1个回答

15
我会使它们长度相等,然后再加起来:
> 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

这里有另一个使用rep函数的解决方案:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接