我正在尝试将以下日期/时间字符串转换为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")
答案 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"