如何在 R 的数据集中创建包含全年日期和时间的列?

问题描述 投票:0回答:3

我有一个 61,368 行的数据集,其中包含 2015 年到 2021 年的数据,每行是一年中一天的一个小时。 这是表格的例子

Site_1 Site_2
1 5 2015
3 9 2015
2 7 2015
5 3 2015
0 6 2015

以上数据对应2015年1月1日(00:00-04:00)的前5条记录。所以数据持续到2021年12月31日23:00。

如何创建包含 dmy_hm 格式日期的列,最好使用 tidyverse?

我想要的是像下表这样的东西

Site_1 Site_2 约会
1 5 2015 01-01-2015 00:00
3 9 2015 01-01-2015 01:00
2 7 2015 01-01-2015 02:00
5 3 2015 01-01-2015 03:00
0 6 2015 01-01-2015 04:00

我尝试过使用rep()函数,但没有成功

r date tidyverse lubridate
3个回答
2
投票

使用

seq()

library(dplyr)

dat %>%
  mutate(date = seq(
    as.POSIXct("2015-01-01 00:00:00"), 
    by = "1 hour", 
    length.out = n()
  ))

# A tibble: 5 × 4
  Site_1 Site_2  Year date               
   <dbl>  <dbl> <dbl> <dttm>             
1      1      5  2015 2015-01-01 00:00:00
2      3      9  2015 2015-01-01 01:00:00
3      2      7  2015 2015-01-01 02:00:00
4      5      3  2015 2015-01-01 03:00:00
5      0      6  2015 2015-01-01 04:00:00

你说你想要“dmy_hm 格式”的日期,但是 R 中的日期和日期时间没有可修改的打印格式。如果您确实希望以这种方式显示值,可以使用

strftime()
format()
:

转换为格式化字符
dat %>%
  mutate(date = strftime(
     seq(
       as.POSIXct("2015-01-01 00:00:00"), 
       by = "1 hour", 
       length.out = n()
    ),
    "%d/%m/%y %H:%M"
  ))
# A tibble: 5 × 4
  Site_1 Site_2  Year date          
   <dbl>  <dbl> <dbl> <chr>         
1      1      5  2015 01/01/15 00:00
2      3      9  2015 01/01/15 01:00
3      2      7  2015 01/01/15 02:00
4      5      3  2015 01/01/15 03:00
5      0      6  2015 01/01/15 04:00

2
投票

您可以使用生成日期序列

dates <- seq(as.POSIXct("2015-01-15 00:00:00"), as.POSIXct("2021-12-31 23:00:00"), by="hour")

然后

cbind
它到你的数据框

new_data <- cbind(df, dates)


0
投票

谢谢! 上面的答案对我解决问题有很大帮助,我使用了这些答案中的基本思想并将其与 lubridate 包放在一起:)

library("lubridate")    
dates <- seq(ymd_hm("2015-1-1 0:00"),
                       ymd_hm("2021-12-31 23:00"),
                       by = "hour") %>% as.data.frame()
© www.soinside.com 2019 - 2024. All rights reserved.