r - 按名称添加两个向量

标签 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 中所示。

最佳答案

只需组合向量(例如使用 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/

相关文章:

swift - 使用 CoreAudio 在 Swift 中以编程方式创建聚合音频设备

返回 texreg() 对象

c++ - 删除除 'largest' 之外的所有 vector 元素

r - 如何将数字向量转换为二进制数?

c++ - void* 到 vector

c++ - 如何组合字符 vector 的二进制第n位

MySQL 查询 GROUP_CONCAT 多行

json - 将ElasticSearch文档按xml标记值分组(在字符串字段中)

r - 因子强制为数据框中的 *each* 行生成数字标签,而不是指定的标签

r - 求多边形外接圆的半径