我正在研究地下水数据(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.
谢谢你的建议
使用
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