从 R 中的日期时间字段中提取日期和时间
Extract date and time from datetime field in R
我有一个看起来像这样的日期集,读数是 POSIXct 格式。我想在 R 的一个字段中提取日期,在另一个字段中提取时间。我尽量避免使用 base R,所以如果你能做到这一点那就太好了(lubridate)。我希望新提取的字段采用正确的格式,因为我的最终目标是绘制时间 (x) 与售出商品总数 (y) 的对比关系,以确定一天中的哪个时间销售额最高。感谢您的帮助。
如果我理解得很好,R 可以在您导入数据时正确读取您的日期和时间(因为它们采用 POSIXct 格式),但您无法从 date-time列。
考虑到你在 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
我有一个看起来像这样的日期集,读数是 POSIXct 格式。我想在 R 的一个字段中提取日期,在另一个字段中提取时间。我尽量避免使用 base R,所以如果你能做到这一点那就太好了(lubridate)。我希望新提取的字段采用正确的格式,因为我的最终目标是绘制时间 (x) 与售出商品总数 (y) 的对比关系,以确定一天中的哪个时间销售额最高。感谢您的帮助。
如果我理解得很好,R 可以在您导入数据时正确读取您的日期和时间(因为它们采用 POSIXct 格式),但您无法从 date-time列。
考虑到你在 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