1) агрегат Используя DF
, воспроизводимый в примечании в конце, усекайте каждый раз до минуты, а затем агрегируйте на основе этого:
aggregate(Value ~ Minute, transform(DF, Minute = trunc(Time, "min")), tail, 1)
, давая:
Minute Value
1 2018-05-01 15:59:00 5
2 2018-05-01 16:59:00 22
3 2018-05-01 17:59:00 8
4 2018-05-01 18:59:00 33
2) subset Альтернативой, в зависимости от того, какой вывод вы хотите, является усечение времен до минут и затем удаление тех строк, для которых есть дублированные усеченные времена, идущие в обратном направлении отконец.
subset(DF, !duplicated(trunc(Time, "min"), fromLast = TRUE))
, дающий:
Value Time
2 5 2018-05-01 15:59:58
4 22 2018-05-01 16:59:49
6 8 2018-05-01 17:59:59
8 33 2018-05-01 18:59:50
Примечание
Мы предполагаем, что следующий вход показан воспроизводимо.Обратите внимание, что мы преобразовали столбец Time
в класс POSIXct
.
Lines <- "
Value Time
1 5/1/2018 15:59:57
5 5/1/2018 15:59:58
21 5/1/2018 16:59:48
22 5/1/2018 16:59:49
5 5/1/2018 17:59:58
8 5/1/2018 17:59:59
71 5/1/2018 18:59:45
33 5/1/2018 18:59:50"
Lines2 <- sub(" ", ",", trimws(readLines(textConnection(Lines))))
DF <- read.csv(text = Lines2)
DF$Time <- as.POSIXct(DF$Time, format = "%m/%d/%Y %H:%M:%S")