如何将复杂的日期/时间字符串解析为zoo对象?

时间:2012-06-06 20:00:52

标签: r zoo

我正在尝试将以下日期/时间字符串转换为zoo对象:

2004:071:15:23:41.87250

2004:103:15:24:15.35931

年:DOY:时:分:秒

日期/时间字符串存储在没有标题的数据框中。 R中最好的方法是什么?

干杯!

根据Gavin的回答编辑:

# read in time series from CSV file; each entry as described above
timeSeriesDates <- read.csv("timeseriesdates.csv", header = FALSE, sep = ",")
# convert to format that can be used as a zoo object
timeSeriesDatesZ <- as.POSIXct(timeSeriesDates$V1, format = "%Y:%j:%H:%M:%S")

2 个答案:

答案 0 :(得分:7)

以通常的方式将数据读入R.您将拥有以下内容:

dats <- data.frame(times = c("2004:071:15:23:41.87250", "2004:103:15:24:15.35931"))
dats

这些可以通过以下方式转换为POSIXt类之一:

dats <- transform(dats, as.POSIXct(times, format = "%Y:%j:%H:%M:%S"))

data$times <- as.POSIXct(dats$times, format = "%Y:%j:%H:%M:%S"))

然后可以在动物园对象中使用。有关?strftime参数中使用的占位符的详细信息,请参阅format;基本上%j是年份占位符的日期。

要执行 zoo 位,我们会使用一些虚拟数据作为实际时间序列

ts <- rnorm(2) ## dummy data
require(zoo)   ## load zoo
tsZoo <- zoo(ts, dats$times)

最后一行给出:

> tsZoo
2004:071:15:23:41.87250 2004:103:15:24:15.35931 
              0.3503648              -0.2336064

小数秒需要注意的一点是,i)使用浮点运算可能无法记录您的确切分数。此外,给定R中选项的值,R可能不会显示完整的小数秒; digits.secs。有关此特定选项以及如何更改此选项的更多信息,请参阅?options

答案 1 :(得分:0)

这是第一个字符串的注释示例:

R> s <- "2004:103:15:24:15.35931"
R> # split on the ":" and convert the result to a numeric vector
R> n <- as.numeric(strsplit(s, ":")[[1]])
R> # Use the year, hour, minute, second to create a POSIXct object
R> # for the first of the year; then add the number of days (as seconds)
R> ISOdatetime(n[1], 1, 1, n[3], n[4], n[5])+n[2]*60*60*24
[1] "2004-04-13 16:24:15 CDT"