【问题标题】:R attach dates to time seriesR将日期附加到时间序列
【发布时间】:2011-05-15 18:32:06
【问题描述】:

我在 excel 中有一个电子表格,其中包含第一行日期,然后是指这些日期不同证券价格的后续列。

我将 excel 文件保存为 csv,然后使用导入到 excel 中

prices=read.csv(file="C:/Documents and Settings/Hugh/My Documents/PhD/Option prices.csv",header = TRUE, sep = ",")

这会创建正确的时间序列数据

x<-ts(prices[,2])

但没有附上日期。

但是,日期指的是工作日。因此,尽管通常它们代表周一至周五,但由于假期等原因,情况并非总是如此。

那么我怎样才能创建一个从 csv 文件的第一列读取日期的时间序列?我在 R 中找不到这样做的示例

【问题讨论】:

  • 请在前几行显示日期和时间,并可能在其他列中显示随机数据。
  • 请不要在这里和R-help交叉发帖。

标签: r time-series


【解决方案1】:

由于你没有提供任何数据,这里是一个虚构的data.frame:

R> DF <- data.frame(date="2011-05-15", time=c("08:25:00", "08:45:00", 
+                   "09:05:11"), val=rnorm(3, 100, 5))
R> DF
        date     time     val
1 2011-05-15 08:25:00 99.5926
2 2011-05-15 08:45:00 95.8724
3 2011-05-15 09:05:11 96.6436
R> DF <- within(DF, posix <- as.POSIXct(paste(date, time)))
R> DF
        date     time     val               posix
1 2011-05-15 08:25:00 99.5926 2011-05-15 08:25:00
2 2011-05-15 08:45:00 95.8724 2011-05-15 08:45:00
3 2011-05-15 09:05:11 96.6436 2011-05-15 09:05:11
R> 

我使用了within(),您可以使用其他方式来分配新列。关键是paste() 允许您组合列,并且您可以根据需要使用其他 R 函数来修改数据。

以合适的类型(如POSIXct)解析日期和时间的主要优点是其他函数可以使用它。这里是zoo

R> z <- with(DF, zoo(val, order.by=posix))
R> summary(z)
     Index                              z       
 Min.   :2011-05-15 08:25:00.00   Min.   :95.9  
 1st Qu.:2011-05-15 08:35:00.00   1st Qu.:96.3  
 Median :2011-05-15 08:45:00.00   Median :96.6  
 Mean   :2011-05-15 08:45:03.67   Mean   :97.4  
 3rd Qu.:2011-05-15 08:55:05.50   3rd Qu.:98.1  
 Max.   :2011-05-15 09:05:11.00   Max.   :99.6  
R> 

【讨论】: