Как я могу создать подмножество для строки, которая имеет целевое значение в группе, и, если ее нет, подмножество для другой строки в той же группе? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь создать подгруппу сгруппированных данных, чтобы у меня была одна строка для каждой группы. Для каждой группы я хотел бы поднастроить строку, если она имеет определенное значение, но если такой строки не существует, то я бы поднастроил альтернативную строку.

Данные сгруппированы по годам и сезонам, и я хотел бы задать строку с Month == 2 из группы 1-го сезона, строку с Month == 4 из 2-го сезона, строку с Month == 8 из 3-го сезона, и строка с Month == 10 из 4-го сезона.

Если нет строки с требованиями, то строка в группе сезонов с наибольшим value будет подмножеством. Например, из строк 4 и 5 строка 4 будет подмножеством.

Year Season Month value 
2012 1      1     3.4 
2012 1      2     6.1 
2012 1      3     9.0 
2012 2      5     4.4 
2012 2      6     1.2 
2012 3      8     4.9 
2012 4      10    2.7 
2013 1      3     8.3 
2013 1      3     2.4 
2013 2      4     7.0 
2013 3      7     12.1 
2013 3      8     5.7 
2013 4      10    6.3 
2013 4      11    3.3 

Желаемый вывод:

Year Season Month value 
2012 1      2     6.1 
2012 2      5     4.4 
2012 3      8     4.9 
2012 4      10    2.7 
2013 1      3     8.3 
2013 2      4     7.0 
2013 3      8     5.7 
2013 4      10    6.3 

Я попробовал следующий код, но не мог понять, как включить мое альтернативное требование в тот же самый бит кода (который, я думаю, потребует if и else if?)

df %>%
  group_by(Year, Season) %>%
  slice(which(Month == 2 | Month == 4 | Month == 8 | Month == 10))
  #slice(which.max(value)) #selects row with largest value in each group

1 Ответ

0 голосов
/ 10 января 2019

Проверьте это решение:

data %>%
  mutate(cond = case_when(
    Season == 1 & Month == 2 ~ 1,
    Season == 2 & Month == 4 ~ 1,
    Season == 3 & Month == 8 ~ 1,
    Season == 4 & Month == 10 ~ 1,
    TRUE ~ 0
  )) %>%
  group_by(Year, Season) %>%
  arrange(desc(cond), desc(Value)) %>%
  slice(1) %>%
  ungroup()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...