Menu
CoddyTech

日期和时间处理

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")
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

challenge icon

挑战

中等

创建一个函数,用于处理包含日期和时间的事件列表。该函数应执行以下操作:

  1. 将输入字符串转换为数据框
  2. 将 'datetime' 列解析为 POSIXct 对象
  3. 提取每个事件对应的星期几
    • 使用 weekdays() 函数。例如:weekdays(date) 
  4. 计算每个事件与第一个事件之间相隔的小时数
    • 获取第一个日期和时间的方法:  

      mutate(
      	datetime = as.POSIXct(datetime, format = "%Y-%m-%d %H:%M:%S"),
      	first_date = min(datetime),
      	...
      )
  5. 设置 'datetime' 列的格式,使其仅显示日期,格式为 "YYYY-MM-DD"
  6. 根据事件发生的小时数创建新列 time_category:
    • 如果小时数在 5 到 11 之间(含 5 和 11),则设为 "Morning"
    • 如果小时数在 12 到 16 之间(含 12 和 16),则设为 "Afternoon"
    • 如果小时数在 17 到 20 之间(含 17 和 20),则设为 "Evening"
    • 其他情况则设为 "Night"
  7. 按原始 datetime 对数据框排序
  8. 仅打印包含以下列的数据框,并按此顺序排列: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 在线编译器