查找最大每日值并返回该值的日期时间。 R

问题描述 投票:0回答:1

我正在研究地下水数据(4 个月内每 2 小时一次),需要找到每日最高和最低地下水位,以及这些值的时间。

这是我的数据示例

日期_时间:dttm level_m: dbl 日期:日期 小时:整数
1 2022-06-14 00:00:00 0 2022-06-14 0
2 2022-06-14 02:00:00 -0.004 2022-06-14 2
3 2022-06-14 04:00:00 -0.012 2022-06-14 4
4 2022-06-14 06:00:00 0.003 2022-06-14 6
5 2022-06-14 08:00:00 0.001 2022-06-14 8
6 2022-06-14 10:00:00 0.878 2022-06-14 10
7 2022-06-14 12:00:00 0.88 2022-06-14 12
8 2022-06-14 14:00:00 0.873 2022-06-14 14
9 2022-06-14 16:00:00 0.872 2022-06-14 16
10 2022-06-14 18:00:00 0.875 2022-06-14 18
11 2022-06-14 20:00:00 0.876 2022-06-14 20
12 2022-06-14 22:00:00 0.887 2022-06-14 22

我从 date_time 创建了日期和小时变量,并且一直在使用聚合。 我用了, max_daily_lvl <- aggregate(data$level_m ~ data$date, FUN = "max")

这可以很好地找到最大每日价值,但不会返回我需要的时间。

我继续 left_join 'max_daily_lvl' 到 'data' 但它加入了数据中每个 date_time 的所有等效 'level_m' 值(有很多)。

如果我使用, max_daily_lvl <- aggregate(data$level_m ~ data$date_time, FUN = "max"), it of course, simply returns the subdaily values, not daily values.

谢谢你的建议

r datetime aggregate
1个回答
0
投票

使用

dplyr
v. 1.1.0,您可以尝试以下操作。使用
summarize
,您可以选择最小和最大
level_m
,并使用
hour
which.min
获得
which.max
。请注意,即使多行中的最小值或最大值相等,这也只会给出一小时的结果。

library(dplyr) #v.1.1.0

summarize(data, min_level = min(level_m), min_hour = hour[which.min(level_m)],
                max_level = max(level_m), max_hour = hour[which.max(level_m)], .by = date)

使用上面的示例数据,输出将是:

        date min_level min_hour max_level max_hour
1 2022-06-14    -0.012        4     0.887       22
© www.soinside.com 2019 - 2024. All rights reserved.