2014-01-09 17 views
-1

关于在R中加入时间序列表的问题...R:加入两个时间序列

我有以下两个数据框; “到达”和“临时”(见下文)。 “到达”描述到达分组的日期/时间/大小,“临时”具有逐分钟温度数据。我想要做的是在“到达”中添加一列,到达$ 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 -series-解决了吗?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 

注:要获得arrivalstemp我们用这个。 (下一次请使用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): 系列不能合并与非 - 系列中唯一的索引条目“。元组(日期,时间)虽然都是唯一的。任何干净的解决方案,而不必将我的变量融入到“日期时间”对象? – bigO6377

+0

把日期和时间放在一起是干净的做法。保持他们分开是凌乱的。 –