【问题标题】:Convert dd/mm/yyyy H to date format将 dd/mm/yyyy H 转换为日期格式
【发布时间】:2021-02-26 12:36:19
【问题描述】:

我在R中有以下列

dteday = c("01/01/2011 0", "01/01/2011 1" , "01/01/2011 2", "01/01/2011 19")
df = data.frame(dteday)
        dteday
1  01/01/2011 0
2  01/01/2011 1
3  01/01/2011 2
4  01/01/2011 19

我希望将列转换为正确的 %d/%m/%Y H:M 格式 左边的字符串是 %d/%m/%Y 格式,而右边的整数是小时。右边的整数代表小时/时间。这是我想要的输出

        dteday
1  01/01/2011 00:00
2  01/01/2011 01:00
3  01/01/2011 02:00
4  01/01/2011 19:00

【问题讨论】:

标签: r dataframe date


【解决方案1】:

那个可以通过组合strftimeas.POSIXct来实现特定格式的输出,但它仍然是一个字符串

df$dteday = strftime(as.POSIXct(df$dteday, format = "%d/%m/%Y %H"), format = "%d/%m/%Y %H:%M")
#             dteday
# 1 01/01/2011 00:00
# 2 01/01/2011 01:00
# 3 01/01/2011 02:00
# 4 01/01/2011 19:00

【讨论】:

    【解决方案2】:

    如果不转换为日期,您可以这样做:

    sapply(
      strsplit(dteday, ' '), 
      function(x) sprintf('%s %02d:00', x[1], as.integer(x[2])))
    )
    
    # [1] "01/01/2011 00:00" "01/01/2011 01:00" "01/01/2011 02:00" "01/01/2011 19:00"
    

    【讨论】:

      【解决方案3】:

      您可以使用lubridatedmy_h 将字符串转换为POSIXct。

      df$dteday <- lubridate::dmy_h(df$dteday)
      df$dteday
      
      #[1] "2011-01-01 00:00:00 UTC" "2011-01-01 01:00:00 UTC" 
      #    "2011-01-01 02:00:00 UTC" "2011-01-01 19:00:00 UTC"
      

      然后使用format 以您选择的格式获取数据。

      format(df$dteday, '%d/%m/%Y %H:%M')
      #[1] "01/01/2011 00:00" "01/01/2011 01:00" "01/01/2011 02:00" "01/01/2011 19:00"
      

      【讨论】:

        猜你喜欢
        • 2017-06-24
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        • 2012-03-05
        • 2011-02-09
        • 2019-04-03
        相关资源
        最近更新 更多