日期和时间处理
Coddy R 中的数据处理 课程的第 13 课,共 14 课。
R 提供了内置函数和类,让你能够高效地处理日期时间对象。
R 中的日期和时间类
R 有 3 个用于处理日期和时间的主要类:
Date:表示不包含时间的日期POSIXct:将日期时间表示为自 1970 年 1 月 1 日以来的秒数POSIXlt:将日期时间表示为由各个组成部分组成的列表(年、月、日等)
创建日期时间对象
你可以使用以下函数创建日期时间对象:
# 创建一个 Date 对象
today <- Sys.Date()
# 创建一个 POSIXct 对象
now <- Sys.time()
# 将字符串转换为 Date 对象
date_from_string <- as.Date("2023-06-15")
# 将字符串转换为 POSIXct 对象
datetime_from_string <- as.POSIXct("2023-06-15 14:30:00")格式化日期时间对象
使用 format() 将日期时间对象转换为字符串:
date <- as.Date("2023-06-15")
formatted_date <- format(date, "%B %d, %Y") # 返回:"June 15, 2023"解析日期时间字符串
要解析日期时间字符串,可以使用 as.Date() 或 as.POSIXct(),并传入格式字符串:
date_string <- "15/06/2023"
parsed_date <- as.Date(date_string, format = "%d/%m/%Y")日期时间计算
R 允许对日期时间对象进行算术运算:
today <- Sys.Date()
next_week <- today + 7 # 加上 7 天
time_diff <- as.numeric(next_week - today) # 获取相差的天数提取组成部分
你可以从日期时间对象中提取特定的组成部分:
date <- as.Date("2023-06-15")
year <- format(date, "%Y")
month <- format(date, "%m")
day <- format(date, "%d")
hour <- format(date, "%H")
minute <- format(date, "%M")
second <- format(date, "%S")这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
挑战
中等创建一个函数,用于处理包含日期和时间的事件列表。该函数应执行以下操作:
- 将输入字符串转换为数据框
- 将 'datetime' 列解析为 POSIXct 对象
- 提取每个事件对应的星期几
- 使用
weekdays()函数。例如:weekdays(date)
- 使用
- 计算每个事件与第一个事件之间相隔的小时数
获取第一个日期和时间的方法:
mutate( datetime = as.POSIXct(datetime, format = "%Y-%m-%d %H:%M:%S"), first_date = min(datetime), ... )
- 设置 'datetime' 列的格式,使其仅显示日期,格式为 "YYYY-MM-DD"
- 根据事件发生的小时数创建新列
time_category:- 如果小时数在 5 到 11 之间(含 5 和 11),则设为 "Morning"
- 如果小时数在 12 到 16 之间(含 12 和 16),则设为 "Afternoon"
- 如果小时数在 17 到 20 之间(含 17 和 20),则设为 "Evening"
- 其他情况则设为 "Night"
- 按原始 datetime 对数据框排序
- 仅打印包含以下列的数据框,并按此顺序排列:
event, datetime, day_of_week, duration_hours, date, time_category
亲手试试
# 读取输入
con <- file("stdin", "r")
input_data <- suppressWarnings(readLines(con))
# 将输入字符串转换为数据框
events_df <- read.csv(text = input_data, stringsAsFactors = FALSE)
# TODO:在下方编写代码,处理 events 数据框
# 1. 将 'datetime' 列解析为 POSIXct 对象
# 2. 提取每个事件是星期几
# 3. 计算每个事件与第一个事件之间相隔的小时数
# 4. 将 'datetime' 列格式化为只显示 "YYYY-MM-DD" 格式的日期
# 5. 根据事件发生的小时数创建新列 'time_category'
# 6. 按原始 datetime 对数据框排序
# 输出结果数据框
print(events_df)R 中的数据处理中的所有课
自己练习: R 在线编译器