我在excel中有一个电子表格,其中包含第一行日期,然后是后续列,这些列表示这些日期不同证券的价格。
我将excel文件保存为csv,然后使用
导入excelprices=read.csv(file="C:/Documents and Settings/Hugh/My Documents/PhD/Option prices.csv",header = TRUE, sep = ",")
这会创建正确的时间序列数据
x<-ts(prices[,2])
但没有附上日期。
但是日期是指工作日。因此,虽然一般情况下它们代表周一至周五,但由于假期等情况并非总是这样。
那么如何创建一个时间序列,从csv文件的第一列读入日期?我在R中找不到这样做的例子
答案 0 :(得分:5)
由于你没有提供任何数据,这里有一个虚构的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>