3

我很确定这将是微不足道的 - 但对于我的生活来说,我没有想到优雅的解决方案......

我有两个可能不同长度的向量:

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


b <- c(10,20,30)
names(b)<-c("a","b","d")

我想生成 x 这样:

x

 a  b  c  d  e 
10 20 NA 30 NA

对于上下文 - 这是一个比较图,我正在比较不同的模型,其中一些模型共享一些参数 - 我想确保等效值排列。

尽管在以下情况下考虑更多:

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


b <- c(10,20,30,1000)
names(b)<-c("a","b","d","x")

我需要返回 2 个新向量:

x1
 a  b  c  d  e  x
 1  2  3  4  5  NA

x2
  a   b   c   d   e     x
 10  20  NA  30  NA  1000

因此给了我 2 个系列来并行绘制 - 我希望至少其中一些是有道理的。

如果有人对我如何完成上述工作有任何建议,我们将不胜感激。

谢谢阅读

D

4

3 回答 3

2

对于x, 尝试

> setNames(b[names(a)], names(a))
 a  b  c  d  e 
10 20 NA 30 NA 

对于x1and x2,尝试

> allnames <- union(names(a), names(b))
> setNames(a[allnames], allnames)
 a  b  c  d  e  x 
 1  2  3  4  5 NA 
> setNames(b[allnames], allnames)
  a    b    c    d    e    x 
 10   20   NA   30   NA 1000 
于 2012-09-25T14:25:49.737 回答
1

在向量子集上添加一setNames点点并摇匀。

setNames(b[names(a)], names(a))
 a  b  c  d  e 
10 20 NA 30 NA 

这适用于您的示例数据,但您可能需要试验它是否更普遍适用。

于 2012-09-25T14:17:01.813 回答
1

我会做:

a <- c(1,2,3,4,5)
names(a)<-c("a","b","c","d","e")
b <- c(10,20,30)
names(b)<-c("a","b","d")

unique(c(names(a),names(b))) -> d
x <- rep(NA,length(d))
names(x) <- d
x[d%in%names(b)] <- b   # for your first case
x
 a  b  c  d  e 
10 20 NA 30 NA 

它也适用于您的第二种情况:

a <- c(1,2,3,4,5)
names(a)<-c("a","b","c","d","e")
b <- c(10,20,30,1000)
names(b)<-c("a","b","d","x")

unique(c(names(a),names(b))) -> d
x1 <- x2 <- rep(NA,length(d))
names(x1) <- names(x2) <- d
x1[d%in%names(a)] <- a
x2[d%in%names(b)] <- b
x1
a  b  c  d  e  x 
1  2  3  4  5 NA 
x2
 a    b    c    d    e    x 
10   20   NA   30   NA 1000 
于 2012-09-25T14:28:08.617 回答