2017-08-17 6 views
1

に応じて、列に文字を割り当てて、私は次のように多くのデータフレームを持っている:rは値

count value 
1 0 7 
2 1 230 
3 2 5 

私は、「値」列に応じて色を割り当てるために列を追加します。最大のものは赤、2番目のものは青、最低のものは緑でなければなりません。

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

Rで簡単に行う方法はありますか?ありがとう!

+7

'rank'すなわち' C( "緑"、 "青"、 "赤")[ランク(DF1で試しを作成するbase Rからrankを使用することができます$ value)] ' – akrun

+1

ありがとう、akrun!あなたのソリューションはとてもシンプルでエレガントです。 – l0110

答えて

3

私たちは、 '色'

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

また、(楽しい)' c( "green"、 "blue"、 "red")[order(order(df1 $ value))] '。 – lmo

1

あなたは私たちがdplyr::case_whenを使用することができます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

を使用することができます。

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)