【问题标题】:How to convert long date frmat如何转换长日期格式
【发布时间】:2022-01-25 19:19:37
【问题描述】:

我有日期格式为这种格式的数据框

"Sun Dec 26 2021 08:10:14 GMT+0100"

查看下面的数据框

Time                                Account Name    Type    Product ID  Successful
Sun Dec 26 2021 08:10:14 GMT+0100   switch  topup   MFIN-1-OR   undefined
Sun Dec 26 2021 08:10:14 GMT+0100   switch  topup   MFIN-1-OR   undefined
Sun Dec 26 2021 08:10:14 GMT+0100   switch  topup   MFIN-1-OR   undefined
Sun Dec 26 2021 08:10:14 GMT+0100   switch  topup   MFIN-1-OR   undefined
Sun Dec 26 2021 08:10:12 GMT+0100   switch  topup   MFIN-1-OR   TRUE
Sun Dec 26 2021 08:10:12 GMT+0100   switch  topup   MFIN-1-OR   TRUE
Sun Dec 26 2021 08:10:11 GMT+0100   switch  topup   MFIN-1-OR   TRUE
Sun Dec 26 2021 08:10:11 GMT+0100   switch  topup   MFIN-1-OR   TRUE
Sun Dec 26 2021 08:10:11 GMT+0100   switch  topup   MFIN-1-OR   TRUE
Sun Dec 26 2021 08:10:10 GMT+0100   switch  topup   MFIN-1-OR   TRUE
Sun Dec 26 2021 08:10:10 GMT+0100   switch  topup   MFIN-1-OR   TRUE

如何将其转换为如下格式

"%y/%m/%d %H:%M:%S"

【问题讨论】:

    标签: r date tidyverse lubridate


    【解决方案1】:

    这可能会使用来自parsedateparse_date 自动解析

    library(parsedate)
    df1$Time <- format(parse_date(df1$Time), "%y/%m/%d %H:%M:%S")
    

    -输出

    > df1
                   Time x y
    1 21/12/26 08:10:14 1 4
    2 21/12/26 08:10:14 2 5
    3 21/12/26 08:10:14 3 6
    

    数据

    df1 <- structure(list(Time = c("Sun Dec 26 2021 08:10:14 GMT+0100", 
    "Sun Dec 26 2021 08:10:14 GMT+0100", "Sun Dec 26 2021 08:10:14 GMT+0100"
    ), x = 1:3, y = 4:6), class = "data.frame", row.names = c(NA, 
    -3L))
    

    【讨论】:

      【解决方案2】:

      我们可以在一些调整后使用lubridate 包的mdy_hms 函数:即删除第一个和最后一个空格之前的所有内容: 感谢@jay.sf 提供数据:

      library(dplyr)
      library(lubridate)
      
      dat %>% 
        mutate(Time = gsub(" [^ ]*$|^[^ ]* ","",Time,perl=T),
               Time = mdy_hms(Time)) %>% 
        as_tibble()
      
        Time                    x     y
        <dttm>              <int> <int>
      1 2021-12-26 08:10:14     1     4
      2 2021-12-26 08:10:14     2     5
      3 2021-12-26 08:10:14     3     6
      

      【讨论】:

        【解决方案3】:

        使用strptime

        strftime(strptime('Sun Dec 26 2021 08:10:14 GMT+0100',
                 '%a %b %d %Y %H:%M:%S GMT%z'), '%y/%m/%d %H:%M:%S'
        )
        # [1] "21/12/26 08:10:14"
        

        在您的数据框中:

        transform(dat, Time=strftime(strptime(Time, '%a %b %d %Y %H:%M:%S GMT%z'), 
                                     '%y/%m/%d %H:%M:%S'))
        #                Time x y
        # 1 21/12/26 08:10:14 1 4
        # 2 21/12/26 08:10:14 2 5
        # 3 21/12/26 08:10:14 3 6
        

        数据:

        dat <- structure(list(Time = c("Sun Dec 26 2021 08:10:14 GMT+0100", 
        "Sun Dec 26 2021 08:10:14 GMT+0100", "Sun Dec 26 2021 08:10:14 GMT+0100"
        ), x = 1:3, y = 4:6), class = "data.frame", row.names = c(NA, 
        -3L))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-25
          • 2018-07-19
          • 1970-01-01
          • 1970-01-01
          • 2023-03-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多