- [R - 在數據幀中,如何過濾每個小時的最大值?

118 0

我想創建一個每年所有降雨的總和的條形圖,讀數每小時記錄一次,但是有時每小時會有多個讀數,數據幀為~231000行,我試圖創建一個演算法來刪除無效的行,但是我始終搞不定,我對R很陌生,所以我覺得應該有一種更簡單的方法可以實現。


working.data[181121:181136, c(2,3,4,5,6,7,9,10)]



 date.year date.month date.day date.hour date.minute PCP01 SLP SPD


181121 2015 5 21 17 54 0.02 NA 0


181122 2015 5 21 18 54 0.02 NA 3


181123 2015 5 21 19 14 0.03 NA 5


181124 2015 5 21 19 21 0.04 NA 6


181125 2015 5 21 19 35 0.05 NA 5


181126 2015 5 21 19 49 0.07 NA 3


181127 2015 5 21 19 54 0.09 NA 3


181128 2015 5 21 20 9 0.02 NA 3


181129 2015 5 21 20 25 0.04 NA 0


181130 2015 5 21 20 34 0.05 NA 0


181131 2015 5 21 20 44 0.06 NA 5


181132 2015 5 21 20 52 NA NA 3


181133 2015 5 21 20 54 0.09 NA 0


181134 2015 5 21 21 15 0.04 NA 0


181135 2015 5 21 21 30 0.05 NA 0


181136 2015 5 21 21 42 0.05 NA 3



這是來自行181121-181136的數據集的一小部分,我只需要181121 、181127 、181133和181136行。

时间: 原作者:

117 2

下面是使用dplyr的方法,每小時數據的最後一行。


working %>%


 group_by(date.year, date.month, date.day, date.hour) %>%


 slice(n()) %>%


 ungroup()



## A tibble: 5 x 9


# row date.year date.month date.day date.hour date.minute PCP01 SLP SPD


# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <lgl> <dbl>


#1 181121 2015 5 21 17 54 0.02 NA 0


#2 181122 2015 5 21 18 54 0.02 NA 3


#3 181127 2015 5 21 19 54 0.09 NA 3


#4 181133 2015 5 21 20 54 0.09 NA 0


#5 181136 2015 5 21 21 42 0.05 NA 3



或者,你可以顯式地得到每個小時的最大雨量:


working %>%


 group_by(date.year, date.month, date.day, date.hour) %>%


 arrange(-PCP01) %>%


 slice(1) %>%


 ungroup()



原作者:
109 1

使用distinct應該是performant :


library(dplyr)



working.data %>%


 arrange(desc(PCP01)) %>% 


 distinct(date.year, date.month, date.day, date.hour)



原作者:
...