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



原作者:
...