【问题标题】:R: Joining two time seriesR:加入两个时间序列
【发布时间】:2014-01-28 12:23:54
【问题描述】:

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

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

【问题讨论】:

标签: r join dataframe time-series


【解决方案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)

【讨论】:

  • 啊太棒了,这几乎正是我想要的!唯一的错误......在我的数据表中进一步向下,我重复了多次但日期不同,但我收到错误“merge.zoo(arrivals.z,temps.z)中的错误:系列无法与非合并系列中的唯一索引条目”。元组(日期,时间)都是唯一的。无需将我的变量融合到“日期时间”对象中的任何干净的解决方案?
  • 将日期和时间放在一起是一种简洁的方式。将它们分开很麻烦。
猜你喜欢
  • 2020-07-16
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 2020-02-10
  • 2011-10-28
相关资源
最近更新 更多