2017-05-28 35 views
0

我从雅虎(下面的代码)下载了股票市场数据 - 对于上下文,起初我尝试了getSymbols(^DJI),但我收到了与雅虎有关的错误消息......不同的问题。R中的时间序列中的子设置时间

的一点是,一旦下载,导入R,I按摩它到足够接近的时间序列的格式,以能够运行chartSeries(DJI)

require(RCurl) 
require(foreign) 
x <- getURL("https://raw.githubusercontent.com/RInterested/datasets/gh-pages/%5EDJI.csv") 
DJI <- read.csv(text = x, sep =",") 
DJI$Date <- as.Date(DJI$Date, format = "%m/%d/%Y") # Formatting Date as.Date 
rownames(DJI) <- DJI$Date       # Assigning Date to row names 
DJI$Date <- NULL         # Removing the Date column 
chartSeries(DJI, type="auto", theme=chartTheme('white')) 

enter image description here

即使数据集不是一个真正的时间序列:

> is.ts(DJI) 
[1] FALSE 

问题出现时,我试图找出日期,例如最小的clo唱出道指的价值。我可以这样做

> DJI[DJI$Close == min(DJI$Close),] 
       Open High  Low Close Adj.Close Volume 
1985-05-01 1257.18 1262.81 1239.07 1242.05 1242.05 10050000 

产生整个行,包括行名称(1985-05-01),这是我想要的只是一部分。不过,如果我坚持刚开的实际日期,我必须兼顾包含日期,第二个数据集的一列:

require(RCurl) 
require(foreign) 
x <- getURL("https://raw.githubusercontent.com/RInterested/datasets/gh-pages/%5EDJI.csv") 
DJI <- read.csv(text = x, sep =",") 

DJI$Date <- as.Date(DJI$Date, format = "%m/%d/%Y") # Formatting Date as.Date 
rownames(DJI) <- DJI$Date   # Assigning Date to row names 
DJI.raw <- DJI      # Second dataset for future subsetting 
DJI$Date <- NULL     # Removing the Date column 

这确实让我跑

> DJI.raw$Date[DJI.raw$Close == min(DJI.raw$Close)] 
[1] "1985-05-01" 

此外,我不认为将数据集转换为.xts文件会有所帮助。

+0

请注意,当您将日期分配给rownames时,它们会变回字符。这就是说,如果你不想在data.frame中包含日期的另一列,并且日期是字符,那么你可以简单地使用'rownames(DJI)[DJI $ Close == min(DJI $关闭)]' – digEmAll

+0

@digEmAll我假设一个时间序列需要行名称作为日期。这不正确吗?另外,如果我将日期列保留在数据集内,则无法运行'chartSeries()'... – Toni

+1

是的,这是可能的(我不知道chartSeries函数),但这并不意味着您不能拥有在data.frame anyaway中将一列列传递给chartSeries ...例如'chartSeries(DJI [, - 1],type =“auto”,theme = chartTheme('white'))'(-1表示我们没有将位置1的列传递给chartSeries,当然如果Date列在位置2,你应该通过-2等等......) – digEmAll

回答

0

我不清楚你想要什么,但它听起来像你只是想约会?你提到XTS是不是一种选择(这将是可运行的)

time(as.xts(DJI))[which.min(DJI$Close)] # POSIXct format 
# [1] "1985-05-01 EDT" 

否则简单rownames + which.min将获得日期吗?

as.Date(rownames(DJI)[which.min(DJI$Close)]) # Date format 
# [1] "1985-05-01" 
+0

我对时间序列不熟悉,但有两个想法是相互矛盾的,可能都是错误的:1.做一个rownames R中的ts需要是日期吗? 2.如果我使用'as.xts()'转换为ts,则rownames将被删除并默认为矩阵格式。 – Toni

+0

创建ts对象时,日期的频率是常规的。使用ts()创建ts对象具有开始日期,结束日期和频率(1 =年度,4 = qrtrly,12 =每月等)的参数。 Xts对象的工作方式不同,它们根本不假定常规频率,并且只需将值符合日期时隙。 –