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。
答案 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。