制作一年中的日期和1827天的重复序列

时间:2018-02-07 20:37:54

标签: r date dplyr

我从一个数据帧开始,这个数据帧从1-1827(5年)开始有数小时和一系列天。我知道第1天是2004-01-01。我添加了几天。我没有关于如何使这个成为约会的想法(所以我可以将其与其他数据相匹配)。

到目前为止看起来如何:

library(vegan) 
data(dune) 
data(dune.env)
sim <- simper(dune, dune.env$Management)
summary(sim, ordered = TRUE)

3 个答案:

答案 0 :(得分:2)

使用data.table:

data.table(hour, as.Date(day_seq, origin = "2004-01-01"))

答案 1 :(得分:1)

以基数R:

seq(from=as.Date("2004-01-01"), length.out = 1827, by="1 days")

答案 2 :(得分:0)

据我了解,OP想要创建一系列5年以上的小时时间戳,这些时间戳应该显示在两列中,作为日期(类barlabel = c("Content1", "Content2.tooltip"))和一天中的小时(整数)。 / p> OP的方法是创建一天中的几小时和几天的交叉产品。

恕我直言,有一种更简单的方法,它使用Date方法进行日期时间类:

seq()
library(data.table)
library(lubridate)
DT <- data.table(time = seq(ymd_h("2004-01-01 00"), 
                            ymd_h("2008-01-01 00"), by = "1 hour"))
DT

现在,我们可以创建 time 1: 2004-01-01 00:00:00 2: 2004-01-01 01:00:00 3: 2004-01-01 02:00:00 4: 2004-01-01 03:00:00 5: 2004-01-01 04:00:00 --- 43845: 2008-12-31 20:00:00 43846: 2008-12-31 21:00:00 43847: 2008-12-31 22:00:00 43848: 2008-12-31 23:00:00 43849: 2009-01-01 00:00:00 date列:

hour
DT[, date := as.Date(time)][, hour := hour(time)][]

买者

OP的方法创造了近2000多行

                      time       date hour
    1: 2004-01-01 00:00:00 2004-01-01    0
    2: 2004-01-01 01:00:00 2004-01-01    1
    3: 2004-01-01 02:00:00 2004-01-01    2
    4: 2004-01-01 03:00:00 2004-01-01    3
    5: 2004-01-01 04:00:00 2004-01-01    4
   ---                                    
43845: 2008-12-31 20:00:00 2008-12-31   20
43846: 2008-12-31 21:00:00 2008-12-31   21
43847: 2008-12-31 22:00:00 2008-12-31   22
43848: 2008-12-31 23:00:00 2008-12-31   23
43849: 2009-01-01 00:00:00 2009-01-01    0
str(df)

比我的方法:

'data.frame': 45700 obs. of  3 variables:
 $ hour      : int  0 1 2 3 4 5 6 7 8 9 ...
 $ day_of_seq: int  0 1 2 3 4 5 6 7 8 9 ...
 $ year      : chr  "nope" "2004" "2004" "2004" ...
str(DT)

这是由OP将当天的小时数编号为Classes ‘data.table’ and 'data.frame': 43849 obs. of 3 variables: $ time: POSIXct, format: "2004-01-01 00:00:00" "2004-01-01 01:00:00" "2004-01-01 02:00:00" ... $ date: Date, format: "2004-01-01" "2004-01-01" "2004-01-01" ... $ hour: int 0 1 2 3 4 5 6 7 8 9 ... - attr(*, ".internal.selfref")=<externalptr> 引起的,这意味着每个午夜出现两次,即实际日期的2400小时和后续日期的0000小时。

OP可能会这样做,但通常认为0:24表示与2004-01-01 24:00:00相同的实例。