У меня есть два набора данных. Один собирается примерно каждые 5 дней, а другой — каждые 15 минут ежедневно. Мне нужен окончательный список, который соответствует ближайшей дате из менее частого набора данных к записи в более частом.
Например:
satDat <- c('2015-04-16', '2015-04-21', '2012-04-26') # collected every 5 days
stationDat <- sort(rep(seq(as.Date("2015-04-01"), as.Date("2015-04-20"), by='day'),2))
#collected multiple times a day
[1] "2015-04-01" "2015-04-01" "2015-04-02" "2015-04-02" "2015-04-03"
[6] "2015-04-03" "2015-04-04" "2015-04-04" "2015-04-05" "2015-04-05"
[11] "2015-04-06" "2015-04-06" "2015-04-07" "2015-04-07" "2015-04-08"
[16] "2015-04-08" "2015-04-09" "2015-04-09" "2015-04-10" "2015-04-10"
[21] "2015-04-11" "2015-04-11" "2015-04-12" "2015-04-12" "2015-04-13"
[26] "2015-04-13" "2015-04-14" "2015-04-14" "2015-04-15" "2015-04-15"
[31] "2015-04-16" "2015-04-16" "2015-04-17" "2015-04-17" "2015-04-18"
[36] "2015-04-18" "2015-04-19" "2015-04-19" "2015-04-20" "2015-04-20"
Я хочу, чтобы мои результаты выглядели так
[1] "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16"
[6] "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16"
[11] "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16"
[16] "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16"
[21] "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16"
[26] "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16"
[31] "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16"
[36] "2015-04-16" "2015-04-21" "2015-04-21" "2015-04-21" "2015-04-21"
satDat[apply(abs(outer(satDat, stationDat, difftime, units = 'days')), 2, which.min)]
, хотя я подозреваю, что есть более элегантный вариант - person alistaire   schedule 12.02.2017cut
, чтобы сузить возможные даты для проверки, чтобы решение @alistaire не было таким взрывоопасным. (Конечно, это было бы больше кода, но очень полезно, если ваши данные достаточно велики.) - person r2evans   schedule 12.02.2017satDat
; у него 2012-04-26, что будет далеко не все...опечатка? В любом случае,outer
сравнивает каждую комбинацию двух векторов с предоставленной функцией, здесьdifftime
, и возвращает матрицу, на которойabs
отбрасывает отрицательные значения.apply
выполняет итерацию по столбцам (поле 2) и применяетwhich.min
, который возвращает индекс наименьшего из них, которые используются для подмножестваsatDat
. Если это была опечатка, я могу добавить ее в качестве ответа с полным объяснением, поскольку альтернативы не предвидится. - person alistaire   schedule 12.02.2017