【问题标题】:Adding multiple vectors in R在R中添加多个向量
【发布时间】:2011-01-28 05:45:57
【问题描述】:

我有一个问题,我必须从 R 中的数据集中添加 33 个等长的整数向量。我知道简单的解决方案是

Vector1 + Vector2 + Vector3 +VectorN

但我确信有办法对此进行编码。还有一些向量用 NA 代替整数,所以我需要一种方法来跳过它们。我知道这可能是非常基本的,但我是新手。

【问题讨论】:

  • 我推荐使用r标签而不是rstats

标签: r vector


【解决方案1】:

这是另一种方法,在对向量求和时删除 NA:

df <- data.frame(vector1, vector2, vector3, vector4)
rowSums(df, na.rm=T)

【讨论】:

  • 这个也可以:apply(df, 1, sum, na.rm=TRUE)
【解决方案2】:

实际上,这并不像看起来那么容易。我认为您想摆脱 NA 并用 0(零)替换它们。另一个解决方案是:

# create dummy variables
set.seed(1234)
x <- round(rnorm(10, 15, 3.2))
y <- round(runif(10, 12, 27))
z <- round(rpois(n = 10, lambda = 5))
# create some NA's
x[c(2,3)] <- NA
y[c(1,3,7)] <- NA
z[c(3,6,10)] <- NA

现在,如果你这样做:

x + y + z  # the result is:
[1] NA NA NA 20 31 41 NA 39 37 25

所以运行:

x[is.na(x)] <- 0
y[is.na(y)] <- 0
z[is.na(z)] <- 0

因此:

x + y + z  # yields:
[1] 16 21  0 25 34 41 16 42 48 25

但是,坦率地说,我建议您坚持使用 @xiechao 的解决方案! 这非常简单明了!

【讨论】:

    【解决方案3】:
    do.call("+", list(vector1, vector2, vector3, vector4))
    

    【讨论】:

    • 这仅在列表有两个元素时有效;否则它会抱怨:“操作员需要一两个参数”
    • 这不能处理NA的情况
    【解决方案4】:

    这就是 mapply 的用武之地:

    mapply(sum,Vector1,Vector2,Vector3,VectorN,na.rm = TRUE)
    

    简单智能清晰

    【讨论】:

      【解决方案5】:
      add = function(...) {
        vectors = list(...)
        res=vectors[[1]]
        for(i in vectors[-1]) res = res + i
        return(res)
      }
      
      add(1:3,4:5,1:3)
      

      【讨论】:

        猜你喜欢
        • 2012-08-14
        • 2015-01-08
        • 2017-06-22
        • 1970-01-01
        • 1970-01-01
        • 2019-12-31
        • 1970-01-01
        • 2023-03-27
        • 2020-12-21
        相关资源
        最近更新 更多