按名称添加两个向量

时间:2014-11-18 04:00:50

标签: r vector aggregate addition names

我有两个命名的载体

v1 <- 1:4
v2 <- 3:5
names(v1) <- c("a", "b", "c", "d")
names(v2) <- c("c", "e", "d")

我想用名字添加它们,即预期的结果是

> v3  
a b c d e   
1 2 6 9 4

有没有办法在R中以编程方式执行此操作?请注意,名称可能不一定按排序顺序排列,例如上面的v2

1 个答案:

答案 0 :(得分:16)

只需组合向量(例如,使用c)并使用tapply

v3 <- c(v1, v2)
tapply(v3, names(v3), sum)
# a b c d e 
# 1 2 6 9 4 

或者,为了好玩(因为你只是做sum),继续&#34; v3&#34;:

xtabs(v3 ~ names(v3))
# names(v3)
# a b c d e 
# 1 2 6 9 4

我想用&#34; data.table&#34;你也可以这样做:

library(data.table)
as.data.table(Reduce(c, mget(ls(pattern = "v\\d"))), 
              keep.rownames = TRUE)[, list(V2 = sum(V2)), by = V1]
#    V1 V2
# 1:  a  1
# 2:  b  2
# 3:  c  6
# 4:  d  9
# 5:  e  4

(我对&#34; data.table&#34;以及显示捕获感兴趣的载体的自动化方式的共享不是很多。)