选择一小时满足条件的日子

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

我有这种结构的数据(真实数据更复杂):

df1 <- read.table(text = "DT   odczyt.1 odczyt.2
'2023-08-14 00:00:00'   362 1.5
'2023-08-14 23:00:00'   633 4.3
'2023-08-15 05:00:00'   224 1.6
'2023-08-15 23:00:00'   445 5.6
'2023-08-16 00:00:00'   182 1.5
'2023-08-16 23:00:00'   493 4.3
'2023-08-17 05:00:00'   434 1.6
'2023-08-17 23:00:00'   485 5.6
'2023-08-18 00:00:00'   686 1.5
'2023-08-18 23:00:00'   487 6.8
'2023-08-19 00:00:00'   566 1.5
'2023-08-19 05:00:00'   278 7.9
'2023-08-19 17:00:00'   561 11.5
'2023-08-19 18:00:00'   365 8.5
'2023-08-19 22:00:00'   170 1.8
'2023-08-19 23:00:00'   456 6.6
'2023-08-20 00:00:00'   498 1.5
'2023-08-20 03:00:00'   961 1.54
'2023-08-20 05:00:00'   397 1.6
'2023-08-20 19:00:00'   532 6.6
'2023-08-20 23:00:00'   493 3.8
'2023-08-21 01:00:00'   441 9.2
'2023-08-21 07:00:00'   793 8.5
'2023-08-21 13:00:00'   395 5.5", header = TRUE) %>% 
  mutate (DT = as.POSIXct(DT))

我选择“reading 1”具有最大值的 3 小时(我将“reading 1”从最大值排序并选择 3 个最大值)。我保留了这些时间发生的日期并删除了其余的行。 对于给定的数据,这些是:

2023-08-20 03:00:00 (961)

2023-08-21 07:00:00 (793)

2023-08-18 00:00:00 (686)

因此预期结果是:

> df1
                    DT odczyt.1 odczyt.2
1  2023-08-18 00:00:00      686     1.50
2  2023-08-18 23:00:00      487     6.80
3  2023-08-20 00:00:00      498     1.50
4  2023-08-20 03:00:00      961     1.54
5  2023-08-20 05:00:00      397     1.60
6  2023-08-20 19:00:00      532     6.60
7  2023-08-20 23:00:00      493     3.80
8  2023-08-21 01:00:00      441     9.20
9  2023-08-21 07:00:00      793     8.50
10 2023-08-21 13:00:00      395     5.50
r dplyr
1个回答
0
投票

这是一个想法:

df1 |>
  mutate(
    day = as.Date(trunc(DT)),
    rnk = rank(odczyt.1, ties="first")
  ) |>
  filter(.by = day, any(rnk <= 3))
#                     DT odczyt.1 odczyt.2        day rnk
# 1  2023-08-15 05:00:00      224      1.6 2023-08-15   3
# 2  2023-08-15 23:00:00      445      5.6 2023-08-15  11
# 3  2023-08-16 00:00:00      182      1.5 2023-08-16   2
# 4  2023-08-16 23:00:00      493      4.3 2023-08-16  15
# 5  2023-08-19 00:00:00      566      1.5 2023-08-19  20
# 6  2023-08-19 05:00:00      278      7.9 2023-08-19   4
# 7  2023-08-19 17:00:00      561     11.5 2023-08-19  19
# 8  2023-08-19 18:00:00      365      8.5 2023-08-19   6
# 9  2023-08-19 22:00:00      170      1.8 2023-08-19   1
# 10 2023-08-19 23:00:00      456      6.6 2023-08-19  12
© www.soinside.com 2019 - 2024. All rights reserved.