将日、月、年、小时合并到R中的日期时间

k10s72fa  于 2023-02-06  发布在  其他
关注(0)|答案(3)|浏览(153)
day   month     year    hour
01     05      2017     00
05     12      2017     01
10     07      2017     23

我没有列minute和seconds现在我尝试获取单个变量date_time,格式为

2017-05-01 00:00:00
2017-12-05 01:00:00
2017-07-10 23:00:00

使用以下代码时出现错误

df$date <- as.Date(with(df, paste(year, month, day,hour,sep="-")),
           "%Y-%m-%d %H:%M:%S")

先谢了

lrpiutwd

lrpiutwd1#

我们可以尝试将paste列与sprintf一起使用,然后使用as.POSIXct转换为日期时间

as.POSIXct(do.call(sprintf, c(df1, fmt = c("%02d-%02d-%4d %02d"))), format = "%d-%m-%Y %H")
#[1] "2017-05-01 00:00:00 IST" "2017-12-05 01:00:00 IST" "2017-07-10 23:00:00 IST"

或者使用lubridate

library(lubridate)
with(df1, ymd_h(paste(year, month, day, hour, sep= ' ')))
0s0u357o

0s0u357o2#

由于年、月、日、小时存储在不同列中,为什么不使用ISOdate函数呢?例如:

> ISOdate("2017","12", "05", "01")
[1] "2017-12-05 01:00:00 GMT"

如果不想看到时区信息,只需将ISOdate Package 为as.Date

> as.Date(ISOdate("2017","12", "05", "01"))
[1] "2017-12-05"

但是这会将对象的类从POSIXct更改为Date,并且(如果我错了请纠正我)不会真正删除时区信息。
这在另一个问题How to convert in both directions between year,month,day and dates in R?中讨论

myss37ts

myss37ts3#

您可以直接执行此操作,而无需使用lubridate生成字符串。

library(lubridate)

df1 %>%
  mutate(date = make_datetime(year, month, day, hour))

这可能比使用字符串解析更可靠。

相关问题