Unixtime 到日期时间和 R 中的 OHLC

Unixtime to datetime and OHLC in R

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

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

在这个问题之后我想使用 Whosebug 上的另一个答案找到数据的 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
......

其中第一列是数字,第二列是unixdate时间,第三列价格,第四列。

为了做到这一点,我使用了这个: 使用 test<-read.csv(##FILELOCATION) 导入 test=as.matrix(test) ##我通过实验做了一个矩阵,我猜是##anyway

然后使用

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 来建立一个向量。 对于(我在 1:10) { x[i]<- as.POSIXct(时间[i,2],origin="1970-01-01") 打印(x[i]) }

告诉我尺寸不正确。

也试过

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 行执行此操作,然后将其导出到 matlab 可以读取的 CSV 文件并开始一些数据分析。我想继续使用 R,但只有几天时间来完成一些滞后指标检查和一个简单的 ANN。

如果您在名为 'dfrm' 的数据框中有一个自 1970 年 1 月 1 日以来的整数秒数 "unixtime" 列和一个名为 time 的列,那么获取日期的方法是

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

...但这不是你所展示的。您显然有一个 headerless 文件并且您正在使用默认为 header=TRUE 的 read.csv,除非您明确告诉它不要将 headers 与...一起使用为此... header=FALSE。如果您没有 headers 并且在 read.csv 调用中没有给它 colnames,那么您将需要使用 head(dfrm) 查看文件,以便您可以使用正确的列名。

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

这是要测试的 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)

我看不出是否使用 headers 有什么不同。 导出我这样做了 write.zoo(xmat, file="/tmp/demo.csv", sep=",") ##or c:/ 从 can I write an xts object using write.csv in R

然后输出为 CSV,您可以在 excel 中打开或导入到 matlab。对我来说,因为我在 matlab 中有一些 exp 并且对许多命令感到满意,所以我更喜欢使用它。虽然我确实看到 R 有多少 "easier" 可以用 to.minutes 或 as.matrix 写入,等等命令显示。