3

これは些細なことだと確信していますが、私の人生では、エレガントな解決策は思い浮かびません....

長さが異なる可能性のある 2 つのベクトルがあります。

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 

x1とについて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

私はするだろう:

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 

また、2番目のケースでも機能します:

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 に答える
1

setNamesベクトルのサブセット化に を少し加えて、よく振ってください。

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

これはサンプル データでは機能しますが、より一般的に適用できるかどうかを実験する必要がある場合があります。

于 2012-09-25T14:17:01.813 に答える