2014-01-09 5 views
-1

вопрос о соединении таблиц временных рядов в R ...R: Соединение двух временных рядов

У меня следующие два кадра данных; «прибытия» и «темпы» (см. ниже). «Прибытие» описывает дату/время/размер прибывающего пакета, а «temps» содержит данные о температуре в минуту. То, что я хотел бы сделать, это добавить столбец в «поступлениях», прилетах $ tempAtArrivalTime, в котором указана текущая температура для заданного времени прибытия. Например, для первого прибытия, в 8:39:04, я хочу, чтобы соответствующий «tempAtArrivalTime» был 76 (самая последняя зарегистрированная температура, в 8:39:00). Самый простой способ сделать это? Благодаря!

>arrivals 
      date  time size of arrival 
2012 2013-09-09 08:39:04    15 
2013 2013-09-09 08:43:15    3 
2014 2013-09-09 08:47:50    7 
2015 2013-09-09 08:54:47    10 

> temps 
     date  time temperature 
2013-09-09 08:33:00   76 
2013-09-09 08:34:00   75 
2013-09-09 08:35:00   74 
2013-09-09 08:36:00   75 
2013-09-09 08:37:00   76 
2013-09-09 08:38:00   76 
2013-09-09 08:39:00   76 
2013-09-09 08:40:00   76 
2013-09-09 08:41:00   77 
2013-09-09 08:42:00   78 
2013-09-09 08:43:00   77 
2013-09-09 08:44:00   78 
2013-09-09 08:45:00   77 
2013-09-09 08:46:00   77 
2013-09-09 08:47:00   77 
2013-09-09 08:48:00   77 
2013-09-09 08:49:00   78 
2013-09-09 08:50:00   79 
2013-09-09 08:51:00   80 
2013-09-09 08:52:00   80 
2013-09-09 08:53:00   79 
2013-09-09 08:54:00   78 
+0

Дубликат [следующий вопрос] (http://stackoverflow.com/questions/7089444/r-merge-two-irregular-time -ряды-решена? RQ = 1). Downvote из-за очевидного дубликата, который тривиально найти –

ответ

1

Попробуйте это:

library(zoo) 
arrivals.z <- read.zoo(arrivals, index = 1:2, tz = "") 
temp.z <- read.zoo(temp, index = 1:2, tz = "") 

na.locf(merge(arrivals.z, temp.z))[time(arrivals.z)] 

, который дает:

    arrivals.z temp.z 
2013-09-09 08:39:04   15  76 
2013-09-09 08:43:15   3  77 
2013-09-09 08:47:50   7  77 
2013-09-09 08:54:47   10  78 

Примечание: Чтобы получить arrivals и temp мы использовали это. (В следующий раз, пожалуйста, используйте dput, чтобы обеспечить входные сигналы в воспроизводимой форме.)

Lines1 <- " date  time size of arrival 
2012 2013-09-09 08:39:04    15 
2013 2013-09-09 08:43:15    3 
2014 2013-09-09 08:47:50    7 
2015 2013-09-09 08:54:47    10 
" 

Lines2 <- "  date  time temperature 
2013-09-09 08:33:00   76 
2013-09-09 08:34:00   75 
2013-09-09 08:35:00   74 
2013-09-09 08:36:00   75 
2013-09-09 08:37:00   76 
2013-09-09 08:38:00   76 
2013-09-09 08:39:00   76 
2013-09-09 08:40:00   76 
2013-09-09 08:41:00   77 
2013-09-09 08:42:00   78 
2013-09-09 08:43:00   77 
2013-09-09 08:44:00   78 
2013-09-09 08:45:00   77 
2013-09-09 08:46:00   77 
2013-09-09 08:47:00   77 
2013-09-09 08:48:00   77 
2013-09-09 08:49:00   78 
2013-09-09 08:50:00   79 
2013-09-09 08:51:00   80 
2013-09-09 08:52:00   80 
2013-09-09 08:53:00   79 
2013-09-09 08:54:00   78 
" 

arrivals <- read.table(text = Lines1, skip = 1)[, -1] 
temp <- read.table(text = Lines2, header = TRUE) 
+0

А потрясающий, это было почти то, что я искал! Единственная ошибка ... Далее в моих листы данных я повторял несколько раз, но с разными датами, но я получаю сообщение об ошибке «Ошибка в файле merge.zoo (arrivals.z, temps.z): не может быть объединена с не- -значные записи индекса в серии ". Однако кортежи (дата, время) уникальны. Любое чистое разрешение без необходимости переводить мои переменные в объект «datetime»? – bigO6377

+0

Объединение даты и времени - это чистый способ сделать это. Сохранение их раздельно грязно. –

Смежные вопросы