【问题标题】:Sum vector with corresponding name具有相应名称的求和向量
【发布时间】:2013-05-11 15:39:40
【问题描述】:

假设你有一个向量列表:

L = list()
L[[1]]= c(2,34,6,7,3)
L[[2]]= c(3,4,6,8,1)
names(L[[1]])=c("A","B","C","D","E")
names(L[[2]])=c("A","R","C","D","F")
L

## [[1]]
##  A  B  C  D  E 
##  2 34  6  7  3 
## 
## [[2]]
## A R C D F 
## 3 4 6 8 1 

我想通过每个元素的名称对 2 个向量求和...结果:

A  B  C  D  E  F  R
5 34 12 15  3  1  4  

谢谢

【问题讨论】:

    标签: r vector sum


    【解决方案1】:

    使用tapply的另一种解决方案

    > tapply(unlist(L), names(unlist(L)), sum)
     A  B  C  D  E  F  R 
     5 34 12 15  3  1  4 
    

    编辑

    即使你的向量有不同的长度,它也能工作,见例子:

    > L = list()
    > L[[1]]= 1:10
    > L[[2]]= c(3,4,6,8,1)
    > names(L[[1]])=LETTERS[1:10]
    > names(L[[2]])=c("A","R","C","D","F")
    
    > tapply(unlist(L), names(unlist(L)), sum)
     A  B  C  D  E  F  G  H  I  J  R 
     4  2  9 12  5  7  7  8  9 10  4  # IT WORKS!!!
    

    【讨论】:

    • 我比我更喜欢这个。
    • 谢谢它现在可以使用...但是如果我的向量长度不同,它将无法使用
    • @joellapalme 如果它们的长度不同,则任何一个答案都有效。
    【解决方案2】:
     x <- aggregate(unlist(L), by=list(names(unlist(L))), FUN=sum)
    result <- x$x
    names(result) <- x$Group.1
    result
    ## A  B  C  D  E  F  R 
    ## 5 34 12 15  3  1  4 
    

    【讨论】:

    • 感谢它现在可以使用...但是如果我的向量长度不同怎么办,它将无法使用。
    猜你喜欢
    • 2021-08-09
    • 2018-04-05
    • 2018-09-26
    • 2016-02-02
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    相关资源
    最近更新 更多