【问题标题】:Extract date and time from datetime field in R从R中的日期时间字段中提取日期和时间
【发布时间】:2020-12-19 23:29:56
【问题描述】:

我有一个看起来像这样的日期集,阅读日期是 POSIXct 格式。我想在 R 的一个字段中提取日期,在另一个字段中提取时间。我试图尽可能避免使用 base R,所以如果你能做到这一点,那就太好了(lubridate)。我希望新提取的字段采用正确的格式,因为我的最终目标是将时间 (x) 与总销售量 (y) 进行对比,以确定一天中的最高销售时间。感谢您的帮助。

【问题讨论】:

  • Base R 只是 R。如果没有 base R,您将无法在 R 中做任何事情。您能澄清一下您的意思吗?你是说你想要使用 lubridate 的答案吗?
  • 如果可能的话,我在 lubridate 中回答会很好,因为我正在使用 tidyverse。但是,任何事情都值得赞赏。谢谢
  • 你读过Extracting time from POSIXct 吗?对于日期部分,您可以使用?as.Date
  • @markus。是的,我做到了。它改变了我的阅读日期字段,在原始阅读日期上增加了天数,在某些情况下增加了几个小时。
  • @Omomaxi 请在您的问题结束时分享dput(head(your_data, 10)) 的输出以及您的代码尝试。这将使其他人更容易帮助您。

标签: r lubridate


【解决方案1】:

如果我理解得很好,R 可以在您导入数据时正确读取您的日期和时间(因为它们是 POSIXct 格式),但您无法从日期时间列中提取正确格式的日期和时间.

考虑到您在 R 中有一个 data.frame,如下所示:

            date_time Sold
1 2020-01-01 03:16:01    2
2 2020-01-02 02:15:12    2
3 2020-01-03 08:26:11    3
4 2020-01-04 09:29:14    2
5 2020-01-05 12:06:06    1
6 2020-01-06 08:08:11    3

Lubridate 不提供提取时间分量的功能,因此您必须使用 minute()、hour() 和 second() 函数逐段提取。然后你可以用 paste() 函数连接这些组件。现在,有了日期,您可以使用 date() 函数提取,然后使用 format() 函数以您想要的方式格式化这些日期。

library(lubridate)
library(dplyr)
library(magrittr)

tab <- tab %>% 
  mutate(
    date = as.Date(date_time),
    hour = hour(date_time),
    minute = minute(date_time),
    second = second(date_time)
  ) %>% 
  mutate(
    format_date = format(date, "%m/%d/%Y"),
    format_hour = paste(hour, minute, second, sep = ":")
  )

结果:

tab %>% select(format_date, format_hour) %>% head()

  format_date format_hour
1  01/01/2020     12:4:23
2  01/02/2020     3:19:13
3  01/03/2020      8:6:24
4  01/04/2020      6:28:2
5  01/05/2020     2:16:20
6  01/06/2020     12:8:28

【讨论】:

    猜你喜欢
    • 2014-11-20
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多