【问题标题】:Problem with changing format of date and time in R在R中更改日期和时间格式的问题
【发布时间】:2021-10-21 22:50:25
【问题描述】:

我在 R 中遇到日期和时间格式问题。

我的 R 代码的格式为:“%Y%m%d %H%M%OS”。例如:“20170929 20:59:56.149”

在我的情况下,时间是字符变量。

我正在尝试编写一个 R 代码,其中格式类型将转换为格式“%Y-%m-%d %H:%M:%OS”

(data <- strptime(data$time, 
                    format = "%Y-%m-%d  %H:%M:%OS", 
                    tz = "GMT")) 

例如

data$time <- as.POSIXct(data$time, format = "%Y-%m-%d  %H:%M:%OS")

但是,我得到了 NA。这可能是什么原因造成的?你知道如何解决它吗?提前感谢您的帮助!

【问题讨论】:

  • format 参数告诉函数如何解析日期...当您指定 "%Y-%m-%d" - 函数会查找那些破折号 ("-")在您提供的示例字符串中不存在(使用“20170929”,您的格式参数应为“%Y%m%d”)。您的时间解析也是如此。
  • 我认为你的核心误解是函数as.Dateas. POSIXct 不只是改变日期的格式......他们实际上试图转换一个类型(在你的大小写,一个字符/字符串)转换为datePOSIXct 类型。 format 参数告诉这个转换函数如何解释字符串。将数据表示为 POSIXct 类型后,您可以使用不同的函数 format 生成具有某种所需形式的新字符串。

标签: r posixct strptime as.date posixlt


【解决方案1】:

我认为@izyda 已经消除了困惑。您在strptime 中包含的格式是您拥有的数据的格式,因此在这种情况下您使用 -

x <- "20170929 20:59:56.149"
strptime(x, format = "%Y%m%d  %H:%M:%OS", tz = "GMT")
#[1] "2017-09-29 20:59:56 GMT"

同样适用于as.POSIXct

或者,如果您对不同的格式感到困惑或厌倦了参考?strptime,您可以使用lubridate 包。在这种情况下,函数 ymd_hms 会有所帮助。

lubridate::ymd_hms(x)
#[1] "2017-09-29 20:59:56 UTC"

【讨论】:

    【解决方案2】:

    来自手册help(strftime)如果指定的时间无效(例如'"2010-02-30 08:00"')结果的所有组成部分都是'NA'。

    此外,如果您想操作日期的输出格式,您需要将日期存储为日期类(@izyda 的 cmets 的插图)。

    首先,重新格式化您的日期以使其更易于操作:

    data <- "20170929 20:59:56.149"
    dat_new <- paste( paste( substr(data, 1, 4), 
       substr(data, 5, 6), substr(data, 7, 8), sep="-" ), 
       substr(data, 10,nchar(data)) )
    dat_new
    [1] "2017-09-29 20:59:56.149"
    

    然后,将类更改为日期:

    dat_cor <- as.POSIXct( dat_new, tz="GMT" )
    dat_cor
    [1] "2017-09-29 20:59:56 GMT"
    class(dat_new)
    [1] "character"
    class(dat_cor)
    [1] "POSIXct" "POSIXt"
    

    最后,选择你的输出格式:

    strftime( dat_cor, format="%m/%d/%Y %H:%M:%OS3", tz="GMT" )
    [1] "09/29/2017 20:59:56.148"
    # or
    strftime( dat_cor, format="%Y-%d-%m %H:%M:%OS3", tz="GMT" )
    [1] "2017-29-09 20:59:56.148"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 2020-11-22
      • 2021-05-13
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多