#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 -