Я бы подошел к этому с более простой точки зрения.Во-первых, убедитесь, что POSIXTIME
является одним из "POSIX"
классов.Затем упорядочите данные по POSIXTIME
.На этом этапе мы можем использовать любые идиомы split-apply-Объединить, чтобы делать то, что вы хотите, используя функцию head()
.Здесь я использую aggregate()
:
Используя этот пример набора данных:
dat <- structure(list(ID = 1:10, TIME = structure(c(4L, 6L, 8L, 1L,
3L, 5L, 7L, 9L, 1L, 2L), .Label = c("00:01:00", "04:00:00", "08:01:00",
"12:00:00", "12:01:00", "16:01:00", "16:02:00", "20:01:00", "20:02:00"
), class = "factor"), POSIXTIME = structure(1:10, .Label = c("2005/05/08 12:00:00",
"2005/05/08 16:01:00", "2005/05/08 20:01:00", "2005/05/09 00:01:00",
"2005/05/09 08:01:00", "2005/05/09 12:01:00", "2005/05/09 16:02:00",
"2005/05/09 20:02:00", "2005/05/10 00:01:00", "2005/05/10 04:00:00"
), class = "factor"), date_only = structure(c(1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 3L, 3L), .Label = c("2005/05/08", "2005/05/09",
"2005/05/10"), class = "factor")), .Names = c("ID", "TIME", "POSIXTIME",
"date_only"), class = "data.frame", row.names = c(NA, 10L))
Сначала получите POSIXTIME
и date_only
в правильных форматах:
dat <- transform(dat,
POSIXTIME = as.POSIXct(POSIXTIME, format = "%Y/%m/%d %H:%M:%S"),
date_only = as.Date(date_only, format = "%Y/%m/%d"))
Далее, порядок по POSIXTIME
:
dato <- with(dat, dat[order(POSIXTIME), ])
Последний шаг - использовать aggregate()
для разделения данных на date_only
и head()
для выбора первой строки:
aggregate(dato[,1:3], by = list(date = dato$`date_only`), FUN = head, n = 1)
обратите внимание: я передаю n
аргумент head()
, значение 1
, указывающее, что он должен извлекать только первую строку наблюдений каждого дня.Поскольку мы отсортировали по дате и времени по дате, первая строка должна быть первым наблюдением за день.Однако следует помнить о проблемах округления.
Последний шаг приводит к следующему:
> aggregate(dato[,1:3], by = list(date = dato$`date_only`), FUN = head, n = 1)
date ID TIME POSIXTIME
1 2005-05-08 1 12:00:00 2005-05-08 12:00:00
2 2005-05-09 4 00:01:00 2005-05-09 00:01:00
3 2005-05-10 9 00:01:00 2005-05-10 00:01:00
Вместо dato[,1:3]
обратитесь к тем столбцам в исходном наборе данных, которые содержат переменные (местоположения?)ты хотел.