如何将命名元素添加到 R 中的向量

How to add named elements to a vector in R

我有一个命名向量(比如 n),名称是从 1 到 25000 的连续整数,以及与之关联的值,还有另一个更小的向量(比如 m),类似于 "n",有 21399 个元素, 名称从 1 开始到 25000 结束。

我想将命名元素添加到向量 "m" 中以找到缺少的名称,并为它们分配值 0。

我通过创建两个数据框并将名称和值作为两列,然后进行左连接来做到这一点,但是有没有更好的方法来做到这一点?

一个更小的例子:

> n=c("1"=3,"2"=5,"3"=2,"4"=9,"5"=8)
> n
1 2 3 4 5 
3 5 2 9 8 
> m=c("1"=9,"2"=7,"5"=2)
> m
1 2 5 
9 7 2 

我希望我的最终 "m" 是:

> m
1 2 3 4 5 
9 7 0 0 2 

我所做的是:

> x=data.frame("p"=names(n),n)
> y=data.frame("p"=names(m),m)
> join(x,y,by="p")
  p n m
1 1 3 9
2 2 5 7
3 3 2 0
4 4 9 0
5 5 8 2

几次尝试:

m[setdiff(names(n), names(m))] <- 0
m[order(as.numeric(names(m)))]
#1 2 3 4 5 
#9 7 0 0 2 

m <- c(m,replace(n,,0))
tapply(m, names(m), sum)
#1 2 3 4 5 
#9 7 0 0 2

replace(replace(n,,0), match(names(m),names(n)), m)
#1 2 3 4 5 
#9 7 0 0 2

使用 NAs 而不是 0:

setNames( m[match(names(n),names(m))], names(n) )
# 1  2  3  4  5 
# 9  7 NA NA  2 

我们可以用这个

x=data.frame("p"=names(n),n)
y=data.frame("p"=names(m),m)


merged = merge (x , y, by ="p", all.x = TRUE)

并用零替换 "NA",我们有

merged[is.na(merged)] <- 0

输出

    p n m
  1 1 3 9
  2 2 5 7
  3 3 2 0
  4 4 9 0
  5 5 8 2