R:加入两个时间序列

时间:2014-01-09 19:02:54

标签: r join dataframe time-series

关于在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

1 个答案:

答案 0 :(得分: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)