【问题标题】:Combine vector with different lengths in R在R中组合具有不同长度的向量
【发布时间】:2020-06-30 19:06:39
【问题描述】:

第一种情况:

我有向量 v1 和 v2 v1

我想创建一个函数(我不想在这 3 种情况下使用 r 函数)来对每个值求和,因为长度不同,我想在这个缺失的地方放一个 0。

因此,我想要: 4, 6, 9, 28, 不适用, 22, 不适用, 11, 13, 15

第二种情况

我想对每个值求和,就像第一种情况一样,但是当到达较小向量的最后一个值时,求和动作必须停止。

因此,它将是: 4, 6, 9, 28, 不适用, 22, 不适用

第三种情况

我想组合每个值并在有较小值时重复它们。

因此,它将是: 4, 6, 9, 28, 不适用, 22, 不适用, 14, 17, 20

【问题讨论】:

  • 到目前为止你尝试过什么?而且,您的尝试遇到了什么问题?

标签: r


【解决方案1】:

我们可以得到相同的长度

mx <- max(length(v1), length(v2))
c(v2, rep(0, mx - length(v2))) + c(v1, rep(0, mx - length(v1)))
#[1]  4  6  9 28 NA 22 NA 11 13 15

第二种情况,使用min

mn <- min(length(v1), length(v2))
v2[seq_len(mn)] + v1[seq_len(mn)]
#[1]  4  6  9 28 NA 22 NA

第三种情况

c(v2, v2[seq_len(mx - length(v2))]) + c(v1, v1[seq_len(mx - length(v1))])
#[1]  4  6  9 28 NA 22 NA 14 17 20

可以转成函数

 f1 <- function(vec1, vec2, method = "min") {
       switch(method, 

           min = {
                  mn <- min(length(vec1), length(vec2))
                  vec1[seq_len(mn)] + vec2[seq_len(mn)]
                  },
            max = {
                 mx <- max(length(vec1), length(vec2))
                 c(vec2, rep(0, mx - length(vec2))) + c(vec1, rep(0, mx - length(vec1)))},
             recycle = {
               mx <- max(length(vec1), length(vec2))
                c(vec2, vec2[seq_len(mx - length(vec2))]) + c(vec1, vec1[seq_len(mx - length(vec1))])
             })
         }


f1(v1, v2)
#[1]  4  6  9 28 NA 22 NA
f1(v1, v2, "max")
#[1]  4  6  9 28 NA 22 NA 11 13 15
f1(v1, v2, "recycle")
#[1]  4  6  9 28 NA 22 NA 14 17 20

【讨论】:

    猜你喜欢
    • 2012-02-03
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    相关资源
    最近更新 更多