如何读取带有时间戳字段的csv?

时间:2014-12-02 19:53:27

标签: r

我尝试导入的字段Ts包含ISO8601时间戳值的csv文件(例如,2014-12-01T18:54:22.973 + 0000)。

我已经看到你可以指定列类:

kd <- read.csv( "my.csv", colClasses=c( "Ts"="?"  ))

但是,我无法找到如何声明时间戳字段。

问题:如何指定此字段是时间戳?

2 个答案:

答案 0 :(得分:4)

如果要将.csv文件直接读入时间序列对象,可以使用read.zoo()包中的函数zoo。这在内部调用read.table()(而不是read.csv),然后转换指定的时间索引列。请参阅?read.zoovignette("zoo-read", package = "zoo")

像你这样的时间戳的例子是:

csv <-
"x,y,timestamp
0,1,2014-12-01T18:54:22.973+0000
1,2,2014-12-01T19:43:11.862+0000"
read.zoo(text = csv, sep = ",", header = TRUE, index = "timestamp",
  format = "%Y-%m-%dT%H:%M:%OS%z", tz = "GMT")

这会产生一个zoo系列,其中包含POSIXct个时间戳:

                    x y
2014-12-01 18:54:22 0 1
2014-12-01 19:43:11 1 2

(当然,如果您从磁盘读取.csv文件而不是R中的文本字符串,则text = csv必须替换为file = "my.csv"之类的内容。)

答案 1 :(得分:2)

不知道直接在阅读中做到这一点的方法,但作为一种解决方法(直到有人知道更多的答案),你可以在后面进行转换:

kd <- read.csv("my.csv")
%  Assume that the timestamp column in the csv file has the header 'timestamp'

kd$newtimestamp <- strptime(kd$timestamp,format="%FT%H:%M:%OS%z")

%  By default this will convert all times to your timezone 
%  but you can control the conversion through the tx argument e.g. tx='GMT'