2016-04-04 10 views
0

Ich habe Mühe, um einige Gruppen in einigen Daten Werte zuweisen, aber ich bin etwas fest. Ich habe versucht match ing unique 's und rep und andere. Ich hoffe, dass jemand hier mir helfen kann.Zuweisen Vektor zu längeren Vektor nach Gruppe

Ich habe einen Datensatz, der

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 

und einen Vektor mit einigen Werten sieht wie folgt aus, die zu jeder Gruppe

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

so zuweisen müssen, dass ich dieses Ergebnis

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 

Antwort

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 

Wenn y ou wissen für eine Tatsache, dass die df$GRP.id Spalte immer aus 1:n für einige max n besteht, dann können Sie die match(df$GRP.id,unique(df$GRP.id)) Stück mit nur df$GRP.id ersetzen. Aber für die Robustheit (d. H. Nur für den Fall, dass diese Annahme nicht immer zutrifft) würde ich mit dem match()/unique() Design gehen.

+0

Sehr schöne Antwort. Danke für den zusätzlichen Kommentar zur Robustheit. Kann ich fragen, warum enden Sie Ihre Zeilen mit einem ';'? –

+0

@EricFail Danke :) Siehe http://stackoverflow.com/a/29004774/4272464 für meine Standardantwort über Semikolons. – bgoldst