Unixtime到datetime和RLC中的OHLC

时间:2015-12-01 21:45:27

标签: r unix-timestamp

TLDR;转到下面的答案,我提供了我为解决问题所做的工作。

我想在读取CSV文件中更改unixtime,以便我可以将此CSV文件导出到matlab以用于学校项目。我在该列中有实际的unixtimes,我想要作为日期(我已经找到了关于如何在stackoverflow上执行它但是它们无法正常工作的问题 - 我的意思是什么?我在下面使用的代码我在stackoverflow上找到了,但我没有R)的基础知识。

在这个问题之后,我想在stackoverflow上使用另一个答案找到数据的OHLC。问题是我无法超越第一阶段。

这些是价格,时间和数量的导入数据。

     X33287 X1331992243 X4.985 X5.72E.00
 [1,]  33291  1331992243  4.985    1.0000
 [2,]  33291  1331992243  4.988    0.3300
 [3,]  33291  1331992243  4.990    1.0000
 [4,]  33291  1331992243  4.993    2.7800
 [5,]  33292  1331992243  4.998   13.5000
 [6,]  33293  1331992243  4.999    0.2660
......

第一列是数字,第二列是未标定时间,第三列是第4列。

为了达到这个目的,我使用了这个:     使用测试导入< -read.csv(## FILELOCATION)     test = as.matrix(test)##我用实验制作了一个矩阵,我想这是##无论如何

然后使用

as.POSIXct(time,origin="1970-01-01") 

我可以找到实际日期的值(耶!),但是我无法用它做任何事情。

查找

A=seq(1,10)*0
for (i in 1:10)
{
A[i]=as.vector(as.POSIXct(test[i,2],origin="1970-01-01"))
print(A[i])

}
[1] 1331992243
[1] 1331992243
[1] 1331992243
[1] 1331992243
[1] 1331992243
[1] 1331992243
[1] 1331992243
[1] 1331992281

它应该是一个约会,而不是unixtime。然后当我as.POSIXct(A)它给我这样的日期

[1] "2012-03-17 11:20:43 NDT" "2012-03-17 11:20:43 NDT" "2012-03-17 11:20:43     NDT" "2012-03-17 11:20:43 NDT"

[5]“2012-03-17 11:20:43无损检测”“2012-03-17 11:20:43无损检测”“2012-03-17

我试过

x=seq(1,length(time))*0 

还有     x = seq(1,40)* 0来设置向量。     for(i in 1:10)      {      x [i]< - as.POSIXct(time [i,2],origin =“1970-01-01”)      打印(X [1])      }

告诉我尺寸不正确。

也尝试了

A=seq(1,40)*0
for (i in 1:40)
{
A[i]=as.vector(as.POSIXct(test[i,2],origin="1970-01-01"))
print(A[i])

}

....它再次输出Unix时间,然后输入

A

....它只是带来了数字列表(num)

 [1] 1331992243 1331992243 1331992243 1331992243 1331992243 1331992243           1331992243 1331992281 1331993630
[10] 1331993693 1331993752 1331993754 1331994303 1331994884 1331998567 1331999674 1331999973 1331999984
[19] 1332002200 1332002326 1332002740 133200275

也尝试了这个我在另一个问题中看到的......也没有用。

p=test[1:40,2]
A=seq(1,10)*0
for (i in 1:10)
{
A[i]=head(as.POSIXct(as.numeric(as.character(p[i])),origin="1970-01-01"))
print(A[i])

}

编辑:使用R: Assigning POSIXct class to a data frame

我这样做了:

text=read.csv("d:/test.csv")

   X33287 X1331992243 X4.985 X5.72E.00
1   33288  1331992243  4.985    1.0000
2   33289  1331992243  4.988    0.3300
3   33290  1331992243  4.990    1.0000
..............

然后取出额外的列,将其作为矩阵后,用 然后删除第一个无用的列

textm=as.matix(text)
textx=textm[,1:3] #redundent oops

给了我

     X1331992243 X4.985 X5.72E.00
[1,]  1331992243  4.985    1.0000
[2,]  1331992243  4.988    0.3300
[3,]  1331992243  4.990    1.0000
..............

然后这个工作

myxts <- xts(testx[,2:4], order.by=as.POSIXct(testx[,1], format='%m/%d/%y %H:%M'))

##then you have your answer 
to.minutes(myxts)
                myxts.Open myxts.High myxts.Low myxts.Close
2012-03-17 11:20:43      4.985      4.999     4.985       4.999
2012-03-17 11:21:21      4.999      4.999     4.999       4.999
2012-03-17 11:43:50      4.907      4.907     4.907       4.907
2012-03-17 11:44:53      4.999      4.999     4.999       4.999

现在我只需要1000000行,然后将其导出为CSV,matlab可以读取并开始一些数据分析。我想继续使用R,但只有几天时间完成一些滞后指标检查和一个简单的ANN。

2 个答案:

答案 0 :(得分:0)

如果您有&#34; unixtime&#34;自1970年1月1日起在名为&#39; dfrm&#39;的数据帧中的整数秒的列。使用名为time的col,然后获取日期的方式是

as.Date(as.POSIXct( dfrm$time , origin="170-01-01"))

......但那不是你所展示的。您显然有一个无头文件,并且您正在使用read.csv,默认为header = TRUE,除非您明确告诉它不要使用标头...等待它...... header=FALSE。如果您没有标题,并且在read.csv调用中没有给它命名,那么您需要查看带有head(dfrm)的文件,以便您可以使用正确的列名。

如果您使用的是xts,那么我怀疑转换为日期是有意义的,因为它假定了唯一的索引值。

答案 1 :(得分:0)

这是要测试的csv https://www.dropbox.com/s/ej18jchoxf34b58/test.csv?dl=0 我做了什么

test<-read.csv("d:/test.csv" headers=FALSE) ##note it doesnt really matter in my case
test[,2]<- as.POSIXct(test[,2], origin='1970-01-01')
##dont know why but I needed to do this after some guess work, if not then later it will
##work properly... im a noob to R. Perhaps someone can explain or ill find it in the 
##manual later.
myxts<- xts(test[,3:4], order.by=as.POSIXct(test[,2], format='%m/%d/%y     %H:%M'))
to.minutes(myxts)

我没有看到使用标头的区别。 出口我这样做了     write.zoo(xmat,file =&#34; /tmp/demo.csv" ;, sep =&#34;,&#34;)##或c:/ 从 can I write an xts object using write.csv in R

然后输出为CSV,您可以在Excel中打开或导入到matlab。对我来说,因为我在matlab中有一些exp并且对许多命令感到满意,所以我更喜欢使用它。虽然我确实看到R是多么容易&#34;更容易&#34;写入to.minutes或as.matrix等命令show。