【问题标题】:How to sum vector elements with the same name in R?如何在R中对具有相同名称的向量元素求和?
【发布时间】:2021-08-09 15:37:04
【问题描述】:

我发现的大多数解决方案都是针对数据框或列表,而不是向量。

来自: myvec = c(A=2, B=2, A=2)

到: desiredvec = c(A=4, B=2)

【问题讨论】:

    标签: r vector sum


    【解决方案1】:

    您可以使用tapply

    > tapply(myvec, names(myvec), sum)
    A B
    4 2
    

    xtabs

    > xtabs(myvec~names(myvec))
    names(myvec)
    A B
    4 2
    

    【讨论】:

      【解决方案2】:

      使用aggregate/stack

      aggregate(values ~ ., stack(myvec), sum)
      

      【讨论】:

        【解决方案3】:

        您可以使用rowsum

        rowsum(myvec, names(myvec))
        #  [,1]
        #A    4
        #B    2
        

        rowsum 返回一个矩阵。如果您需要矢量。

        rowsum(myvec, names(myvec))[, 1]
        #A B 
        #4 2 
        

        【讨论】:

          【解决方案4】:

          定义:

          splitbyitsnames <- function(namedVec) { # split a list by its names
            stopif(is.null(names(namedVec)), message = "NO NAMES")
            split(namedVec, f = names(namedVec))
          }
          
          unlapply <- function (...) { unlist(lapply(...)) } # lapply, then unlist
          
          sumBySameName <- function(namedVec) { # Sum up vector elements with the same name
            unlapply(splitbyitsnames(namedVec), sum)
          }
          
          

          来自CodeAndRoll

          调用:

          > sumBySameName(myvec)
          A B 
          4 2 
          

          如果有更好的解决方法请补充


          【讨论】:

            猜你喜欢
            • 2018-06-15
            • 2020-06-25
            • 1970-01-01
            • 1970-01-01
            • 2013-05-11
            • 2016-02-02
            • 2023-02-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多