2017-08-17 110 views
1

我具有類似於這個許多數據幀:ř分配字符給列根據值

count value 
1 0 7 
2 1 230 
3 2 5 

我要添加的列按照「值」列,以指定顏色。最大的應該是紅色的,第二個應該是藍色的,最小的應該是綠色的。

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

在R中有一種簡單的方法嗎?謝謝!

+7

與'rank'即'C( 「綠」, 「藍」, 「紅」)[秩(DF1嘗試$ value)]' – akrun

+1

謝謝,akrun!您的解決方案非常簡單和優雅。 – l0110

回答

3

我們可以使用rankbase R創建 '色'

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

(有趣)'c(「green」,「blue」,「red」)[order(order(df1 $ value))]'。 – lmo

1

您可以使用dplyr

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

似乎只有使用'dplyr'才能分配一個新列 – Wen

1

我們可以使用dplyr::case_when

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" 
)) 

或者先創建Rank列,然後分配基於Rank列中的值。

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