Как указать два самых высоких наблюдения в группе (с двумя условиями)?

#r #dataframe

#r #фрейм данных

Вопрос:

По запросу от Ronak. Это мой набор данных:

 Month      Week   Y     Name   Color
January     2     1.2    Joe    Red
January     2     3.3    Eric   Red
January     2     4.5    Mike   Blue
January     2     1.7    Brian  Blue
January     2     2.9    Pete   Red
January     2     6.8    Dave   Red
January     3     4.6    Joe    Red
January     3     5.1    Eric   Blue
January     3     2.1    Mike   Blue
January     3     6.9    Pete   Red
January     3     6.8    Dave   Red

...
 

Я хотел бы создать новый столбец («Самый высокий»), который идентифицирует людей с двумя самыми высокими значениями Y за данную неделю (идентифицируя их с помощью A и B, чтобы позже было легче создавать отрезки линии в моем проекте), которые также имеют синий цвет.

 Month      Week   Y     Name    Color Highest
January     2     1.2    Joe     Red    -
January     2     3.3    Eric    Red    B
January     2     4.5    Mike    Blue   A
January     2     1.7    Brian   Blue   -
January     2     2.9    Pete    Red    -
January     2     6.8    Dave    Red    -
January     3     4.6    Joe     Red    -
January     3     5.1    Eric    Blue   B
January     3     2.1    Mike    Blue   A
January     3     6.9    Pete    Red    -
January     3     6.8    Dave    Red    -

...
 

Короче говоря, я хочу, чтобы в новом столбце указывались два самых высоких значения Y, когда неделя равна двум, а цвет синий.

Ответ №1:

Вы могли бы использовать :

 library(dplyr)
df %>%
  arrange(Month, Week, Color != 'Blue', desc(Y)) %>%
  group_by(Month, Week) %>%
  mutate(Highest = c('A','B', rep('-', n() - 2)))


#   Month    Week     Y Name  Color Highest
#   <chr>   <int> <dbl> <chr> <chr> <chr>  
# 1 January     2   4.5 Mike  Blue  A      
# 2 January     2   1.7 Brian Blue  B      
# 3 January     2   6.8 Dave  Red   -      
# 4 January     2   3.3 Eric  Red   -      
# 5 January     2   2.9 Pete  Red   -      
# 6 January     2   1.2 Joe   Red   -      
# 7 January     3   5.1 Eric  Blue  A      
# 8 January     3   2.1 Mike  Blue  B      
# 9 January     3   6.9 Pete  Red   -      
#10 January     3   6.8 Dave  Red   -      
#11 January     3   4.6 Joe   Red   -