【问题标题】:How can I create a column containing the date and time of a whole year in a dataset in R?如何在 R 的数据集中创建包含全年日期和时间的列?
【发布时间】:2023-02-22 14:19:11
【问题描述】:
我有一个 61,368 行的数据集,其中包含 2015 年到 2021 年的数据,每行是一年中一天的一个小时。
这是表格的示例
| Site_1 |
Site_2 |
Year |
| 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 |
Year |
date |
| 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
【解决方案1】:
您可以使用生成日期序列
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)
【解决方案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() 将其转换为格式化字符:
library(dplyr)
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