2016-07-28 65 views
1

例如,使用空气质量数据, 我想计算每个月的最高温度。然后保持这个最高温度发生的日子。使用dplyr group_by总结如何保持变量发生在另一个变量的最大值?

library(dplyr) 
# Maximum temperature per month 
airqualitymax <- airquality %>% 
    group_by(Month) %>% 
    summarise(maxtemp = max(Temp)) 
# Day of the month on which the max occured 
airquality %>% 
    left_join(airqualitymax, by = "Month") %>% 
    filter(Temp == maxtemp) 

现在看来,这一天是不是唯一的,但 假设它是独一无二的,有没有一种方法,以选择将在总结出现的最大的一天()直接?

+2

你的意思'...总结(maxtemp = MAX(TEMP),天=天[which.max(临时)])'? –

+0

哦,是的,谢谢!我不知道'which.max()' –

回答

1

我们可以使用slice保持有最大的“温度”行每个“月”

airquality %>% 
    group_by(Month) %>% 
    slice(which.max(Temp)) 

更快的选择是arrange的“温度”按降序(或升序),并获得第一观察(或最后slice(n())

airquality %>% 
    group_by(Month) %>% 
    arrange(desc(Temp)) %>% 
    slice(1L) 
+1

太好了,我接受你的答案。我也喜欢'sumarise(day = Day [which.max(Temp)])'由上面的@docendo discimus提供的解决方案,因为总结给出了一个很好的短数据框。 –

+0

@PaulRougieux我以为你想要整个行。 – akrun

+0

两种方式都很好。在我的问题中,我不清楚这一点。在实际数据中,我正在考虑每个国家发生最大消费的年份。目前,我正在探索数据集,越多的信息越好,所以我会在整个行中使用您的解决方案。然后,当我实现一个功能来做到这一点时,我可能会使用另一个数据框,其中较短的一行仅包含国家,最大(消费)和年份。 –

相关问题