2016-07-28 51 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

兩種方式都很好。在我的問題中,我不清楚這一點。在實際數據中,我正在考慮每個國家發生最大消費的年份。目前,我正在探索數據集,越多的信息越好,所以我會在整個行中使用您的解決方案。然後,當我實現一個功能來做到這一點時,我可能會使用另一個數據框,其中較短的一行僅包含國家,最大(消費)和年份。 –

相關問題