2017-02-13 2 views
0

zum Beispiel der VektorGibt es eine schnelle Möglichkeit, Elementen mit denselben Namen in einem Vektor die gleichen Werte zuzuordnen?

xx = c(1, 2, 3, 2, 1, 5, 8, 3, 2,4) 

der Name jedes Elements in xx:

names(xx) = c('a', 'b','a','c', 'b', 'b', 'c','b', 'c', 'c') 

Gibt es einen schnellen Weg, um den Wert jedes Elements in xx auf den Maximalwert neu zu vergeben von Elementen mit den gleichen Namen? Zum Beispiel ist der Maximalwert von Elementen mit dem Namen 'a' 3, also werde ich allen Elementen mit dem Namen 'a' 3 zuweisen.

Bitte beachten Sie, dass ich die Namen von xx nicht sortieren möchte. Gibt es einen schnellen Weg, um dieses Ziel zu erreichen, ohne Schleifen zu verwenden?

+8

'ave (xx, Namen (xx), FUN = max)' –

+0

Thank you so much! Wirklich großartig!!! –

Antwort

1

Die ave Lösung ist die beste. Aber hier ist eine Alternative dplyr mit:

keys = c('a', 'b','a','c', 'b', 'b', 'c','b', 'c', 'c') 
k<-data.frame(keys , xx) 
k %>% group_by(keys) %>% mutate(xx=max(xx)) 

Source: local data frame [10 x 2] 
Groups: keys [3] 

    keys xx 
    <fctr> <dbl> 
1  a  3 
2  b  5 
3  a  3 
4  c  8 
5  b  5 
6  b  5 
7  c  8 
8  b  5 
9  c  8 
10  c  8 
+1

Keine Notwendigkeit für den Umweg über eine andere Variable, Sie können vorhandene Variablen ändern: 'k%>% group_by (Schlüssel)%>% muate (xx = max (xx))'. - Verbessern Sie auch die Formatierung Ihres Codes, indem Sie Leerzeichen um binäre Operatoren verwenden. –

+0

@KonradRudolph Sie haben Recht. Nach Vorschlägen bearbeitet. – thisisrg

Verwandte Themen