【问题标题】:Create a Time series object yyyy-mm-dd hh:mm创建时间序列对象 yyyy-mm-dd hh:mm
【发布时间】:2013-04-22 16:21:00
【问题描述】:

给定一个热量消耗数据集,我想创建一个时间序列对象,其中年、日和小时位于不同的列中。文件数据是这样的

rdays  heat[J] ds.jdate ds.hh ds.dow ds.tod ds.diy ds.wiy
0        1000    12965    2      6       2    182   26
0.0416   1150    12965    3      6       2    182   26 

而解释变量是:

rdays:  'Running days', No. of days from the start of the data set
(obs 1 = 0, obs 2 = 1/24, ...)

Information on time:

jdate:  Julian date (No. of days since 1Jan1960)
hh:         Time of day (0,...,23)
dow:    Day of week (1=monday, ... , 7=sunday)
tod:    Type of day (1=Working day, 2=Half-Holy (incl. Saturday),
        3=Holy (incl. Sunday))
diy:    Day in year
wiy:    Week in year 

开始时间是01Jul1995 02:00,结束时间是30Jun1996 23:00

【问题讨论】:

    标签: r


    【解决方案1】:
    DF <- read.table(text="rdays  heat[J] ds.jdate ds.hh ds.dow ds.tod ds.diy ds.wiy
    0        1000    12965    2      6       2    182   26
    0.0416   1150    12965    3      6       2    182   26 ",header=TRUE)
    

    计算自 1960-01-01 以来的秒数,然后使用 as.POSIXctorigin 参数来获取日期/时间变量。使用日期/时间变量时,切勿忘记设置时区。

    DF$time <- as.POSIXct(DF$ds.jdate*24*3600+DF$ds.hh*3600,
                     origin=as.POSIXct("1960-01-01 00:00:00",tz="GMT"),tz="GMT") 
    

    为方便起见,创建一个xts 时间序列。

    library(xts)
    as.xts(DF[,2,drop=FALSE],order.by=DF$time)
    #                     heat.J.
    # 1995-07-01 02:00:00    1000
    # 1995-07-01 03:00:00    1150
    

    如果你想要一个ts 对象,你可以使用as.ts

    【讨论】:

    • +1!但是,为了 OP,您能否详细说明您在做什么。
    • +1,但您也可以只使用 rdays 并适当设置原点,即as.POSIXct(DF$rdays , origin=as.POSIXct("1995-06-01 02:00:00",tz="GMT"),tz="GMT")
    • 感谢您的回答。你能再解释一下你的步骤吗?
    • @SimonO101 您需要使用rdays*24*3600 并且存在舍入错误。
    • @R_user 我相信 Roland 会,但同时尝试阅读 as.POSIXct 的文档,即在控制台中输入 ?as.POSIXct 并尝试找出参数的作用。跨度>
    猜你喜欢
    • 2018-07-26
    • 2019-09-20
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    相关资源
    最近更新 更多