2016-04-04 13 views
0

私はいくつかのグループの値をいくつかのデータに割り当てるのに苦労していましたが、ややこずっています。私はmatchuniqueとし、repなどを試しました。誰かが私を助けることを願っています。グループごとに長いベクトルにベクトルを割り当てる

私はこの

df <- data.frame(
GRP.id = c(1, 2, 2, 2, 3, 3), 
group = c("A", "B", "B", "B", "C", "C")) 
> df 
    GRP.id group 
1  1  A 
2  2  B 
3  2  B 
4  2  B 
5  3  C 
6  3  C 

、各グループIは

この結果を得るよう

value <- c(.3, .8, .3) 

に割り当てする必要があるいくつかの値を持つベクトルのように見えるデータセットを持っています

GRP.id group value 
1  1  A 0.3 
2  2  B 0.8 
3  2  B 0.8 
4  2  B 0.8 
5  3  C 0.3 
6  3  C 0.3 

答えて

2
df$value <- value[match(df$GRP.id,unique(df$GRP.id))]; 
df; 
## GRP.id group value 
## 1  1  A 0.3 
## 2  2  B 0.8 
## 3  2  B 0.8 
## 4  2  B 0.8 
## 5  3  C 0.3 
## 6  3  C 0.3 

y df$GRP.id列は常に1:n(最大数は)で構成されていることを知っていれば、match(df$GRP.id,unique(df$GRP.id))の部分をdf$GRP.idに置き換えることができます。しかし、堅牢性(つまり、仮定が常に真であるとは限りません)の場合は、match()/unique()デザインを使用します。

+0

非常に美しい応答。堅牢性についてのコメントをいただきありがとうございます。どうしてあなたの行を ';'で終わらせるのか聞いてもらえますか? –

+0

@EricFailありがとう:)セミコロンに関する私の標準的な回答については、http://stackoverflow.com/a/29004774/4272464を参照してください。 – bgoldst

関連する問題