【问题标题】:How Can I Get minute() to Return 00 instead of 0?如何让 minute() 返回 00 而不是 0?
【发布时间】:2018-11-21 05:48:10
【问题描述】:

我正在从 R 中的 dttm 对象中提取时间数据并将其格式化为 HH:MM。我已经能够使用

paste(hour(datetime), minute(datetime), sep=':')

有一个例外:当分钟小于 10 时。当我这样做时,分钟函数只返回不带前导 0 的分钟。例如:

library(lubridate)

datetime = ymd_hms('2018-11-18 14:00:00')

minute(datetime)

这给出了

的输出
> minute(datetime)
[1] 0

我相信有使用 hms 或其他包/功能的选项,或者通过构建 if-then,但我想尽量减少依赖性和复杂性,并尽可能坚持 lubridate 的细节以实现我的目标。

(注意:我意识到 hour() 也存在同样的问题,但我使用的所有时间都是 PM,所以在我的情况下并不那么紧迫)。

【问题讨论】:

  • 您的数据有 14 小时 0 分钟,所以很明显它会将分钟作为 0 更改为 14:30 ,它会给您输出 30
  • sprintf("%02d", minute(datetime)) ?

标签: r lubridate


【解决方案1】:

使用format,您可以在指定后获得自己的自定义日期格式 -

> format(datetime, "%M")
[1] "00"

感谢@Ronak -

> sprintf("%02d", minute(datetime))
[1] "00"

【讨论】:

  • 使用基本 R 可以实现的目标总是令人惊叹!
  • @Christoph 令人惊讶的是,您可以使用基数 R 获得小时分钟。
  • 太棒了。第二个选项在我运行的特定脚本中效果很好。谢谢。
【解决方案2】:

你为什么要做所有这些额外的工作?只需直接从您的日期时间 (POSIXct) 对象中获取时间。

strftime(datetime, "%H:%M")
# [1] "14:00"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多