2017-08-17 1 views
1

ich viele Datenrahmen ähnlich wie diese:r Zeichen einer Spalte zuweisen Werte nach

count value 
1 0 7 
2 1 230 
3 2 5 

ich eine Spalte hinzufügen möchten Farben zuweisen entsprechend der Spalte „Wert“. Der größte sollte rot sein, der zweite sollte blau sein, der kleinste sollte grün sein.

count value color 
1 0 7 blue 
2 1 230 red 
3 2 5 green 

Gibt es eine einfache Möglichkeit, es in R zu tun? Vielen Dank!

+7

Versuchen mit 'rank' dh' c ("grün", "blau", "rot") [Rang (DF1 zu erstellen $ Wert)] ' – akrun

+1

Danke, akrun! Ihre Lösung ist so einfach und elegant. – l0110

Antwort

3

Wir rank von base R verwenden, um die 'Farbe'

df1$color <- c("green", "blue", "red")[rank(df1$value)] 
+2

Auch (zum Spaß)' c ("grün", "blau", "rot") [order (order (df1 $ value))] ''. – lmo

1

können Sie verwenden dplyr Paket

df <- data.frame(count = c(0,1,2), value = c(7,230,5)) 
df <- df %>% 
    mutate(color = ifelse(value == min(value), "green", ifelse(value == max(value), "red", "blue"))) 
+2

Scheint so, als ob Sie nur 'dplyr' verwenden, um eine neue Spalte zuzuweisen – Wen

1

Wir dplyr::case_when verwenden können.

dt <- data.frame(count = c(0, 1, 2), value = c(7, 230, 5)) 

library(dplyr) 

dt2 <- dt %>% 
    mutate(color = case_when(
    value == max(value) ~ "red", 
    value == min(value) ~ "green", 
    TRUE    ~ "blue" 
)) 

Oder erstellen Sie die Rank Säule zuerst und dann die Werte basierend auf Rank Spalte zuordnen.

dt2 <- dt %>% 
    mutate(Rank = dense_rank(value)) %>% 
    mutate(color = case_when(
    Rank == 1 ~ "green", 
    Rank == 2 ~ "blue", 
    Rank == 3 ~ "Red" 
)) %>% 
    select(-Rank) 
Verwandte Themen