2016-09-12 22 views
0

名前に1〜25000の連続した整数と名前が付いた名前付きベクトル(nと言う)とそれに関連付けられた値、 1から始まり25000で終わる名前の21399個の要素があります。名前付き要素をベクトルに追加する方法R

欠落している名前のベクトル "m"に名前付き要素を追加し、値0を割り当てたいとします。

私は名前と値を2つの列として両方のデータフレームを作成してから左結合を実行しましたが、それを行うにはより良い方法がありますか?

はるかに小さい例:私がやったこと

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

だった:

> 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" がなりたい

> 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 
+0

人々があなたを助けやすいように[reproducible](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)の例を追加してください。 –

+0

'n'と' m'はどのように関連付けられていますか?あなたは基本的に値0の欠けている名前シーケンスをすべて望みます。 –

+0

"n"と "m"は同じ名前の範囲を持っています –

答えて

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 
代わりに0の NA Sが

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

5秒であなたは私を打ち負かします:-) – r2evans

0

私たちは、この

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 
関連する問題