我有一个 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()函数,但没有成功
使用
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
您可以使用生成日期序列
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)
谢谢! 上面的答案对我解决问题有很大帮助,我使用了这些答案中的基本思想并将其与 lubridate 包放在一起:)
library("lubridate")
dates <- seq(ymd_hm("2015-1-1 0:00"),
ymd_hm("2021-12-31 23:00"),
by = "hour") %>% as.data.frame()