如何为组中具有目标值的行设置子集,如果没有,则如何为同一组中的另一行设置子集?

时间:2019-01-10 16:08:11

标签: r

我正在尝试对已分组的数据帧进行子集处理,以便最后为每个组添加一行。对于每个组,我希望对具有特定值的行进行子集化,但是如果不存在这样的行,那么我将对另一行进行子集化。

数据按年份和季节分组,我想将第1季度组中的Month == 2行作为子集,将第2季度中的Month == 4行作为子集,将{{1 }}从第3季开始,并与Month == 8从第4季开始。

如果没有要求的行,则季节组中Month == 10最大的行将是子集。例如,在第4行和第5行中,第4行将是子集。

value

所需的输出是:

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

1 个答案:

答案 0 :(得分:2)

检查此解决方案:

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