我有两个命名向量

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所示。

最佳答案

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

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


或者,为了好玩(因为您只是在做sum),请继续“ v3”:

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




我想使用“ data.table”还可以执行以下操作:

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


(我为“ data.table”分享了后者,而不是为了展示自动捕获感兴趣向量的方式。)

关于r - 通过名称添加两个向量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26986363/

10-12 16:32