首页 > 解决方案 > 如何过滤数据框中每小时的最大值?

问题描述

本质上,我想创建一个条形图,它是每年所有降雨量的总和。读数大约每小时记录一次,但有时每小时有多个读数。不幸的是,当在一小时内有多个读数时,PCP01(给定小时内的降雨量变量)显示该特定小时在特定分钟间隔内的降雨量总和。这会导致有多个降雨量,具体取决于时间有多晚。这弄乱了绘图,所以我真的只想要每小时最大的 PCP01 值。有时在同一小时内有两个 PCP01 值具有相同的值,在这种情况下,我希望删除其中一个。数据框约为 231000 行。我尝试创建一个算法来删除无效行,但我无法让它工作。

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 行。如果有人需要数据框中的更多数据,我可以提供更多部分。

标签: r

解决方案


这是一种方法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()

推荐阅读