R语言 将数字转换为时间和日期

xe55xuns  于 2022-12-20  发布在  其他
关注(0)|答案(3)|浏览(590)

我正在尝试将数值转换为时间和日期。我正在使用一个数据集,所以如果你应该显示一个使用数据集的例子,我将不胜感激。
这里有一些例子,将93537转换成09:35:57(时:分:秒)。另外,我需要将22-07-03转换成22 - 07 - 03(年:分:日)。
我将在下面添加我的代码示例:

CPLF_data$HMS <- substr(as.POSIXct(sprintf("%04.0f", CPLF_data$StartTime), format='%H%M%S'), 12, 16)

CPLF_data$YMD <- as.POSIXct(CPLF_data$Date, tz="UTC", origin ="1970-01-01", format ="%Y-%M-%D")

第一行是正确的,但是它没有显示秒。第二行是不正确的。
谢谢你。

我希望我的最终产品是一个新的列与时间和日期在正确的格式与自己的列。

ulydmbyx

ulydmbyx1#

使用chron times类来获取时间,或者如果需要字符串,则使用.character。使用as.Date来获取Date类对象。sub在时间部分之间放置冒号,之后我们可以将其转换为times类。如果日期只有5个字符,sprintf会在左侧用0填充,否则将其保留为6个字符,然后将其转换为Date类。

library(chron)
time <- 93537 
date <- 220703 

tt <- times(sub("(..)(..)$", ":\\1:\\2", time))
tt
## [1] "09:35:37"

as.character(tt)
## [1] "09:35:37"    

dd <- as.Date(sprintf("%06d", date), "%y%m%d")
dd
## [1] "2022-07-03"

as.character(dd)
## [1] "2022-07-03"
zujrkrfu

zujrkrfu2#

尝试lubridate包中的ymd_hms函数。

output$datetime <- ymd_hms(paste(input$year, input$month, input$day,
                                 input$HH, input$MM, input$SS, sep="-"))

如果没有秒,可以输入00,例如......

rjzwgtxy

rjzwgtxy3#

Base R没有一个只针对“time”(日期)的类,as.POSIXct不处理“times”,它处理“date-times”。lubridate::包确实给予了类似数字的HMS值,这可能是相关的,但由于每行都有日期和时间,因此似乎应该将它们组合起来,而不是将它们放在单独的列中。

CPLF_data |>
  transform(
    StartTime = as.numeric(StartTime),
    Date = as.numeric(Date)
  ) |>
  transform(
    DateTime = ISOdate(
      2000 + Date %/% 10000, (Date %% 10000) %/% 100, Date %% 100,
      StartTime %/% 10000, (StartTime %% 10000) %/% 100, StartTime %% 100)
  )
#   StartTime   Date            DateTime
# 1     93537 220703 2022-07-03 09:35:37

注意:我假设所有年份都是两位数,并且在2000年或之后。如果这不是真的,使用一些自定义代码来解决它并不难。另外,如果你想通过添加tz="US/Mountain"或任何更适合数据的方法来设置这个时间戳的时区,请交给你。
数据类型

CPLF_data <- data.frame(StartTime = "93537", Date = "220703")

相关问题