R语言如何从指定格式datetime数据中提取正确的星期数字
问题根因
返回结果错误是两个问题叠加导致的:
- 时间解析错位:你直接把字符串传入
wday()时,函数没有按照dd-mm-yy hh:mm的格式识别时间,默认按yy-mm-dd规则把13-06-21解析成了2013年6月21日,这个日期是周五,按默认计数规则刚好返回6,和你拿到的错误结果完全吻合。 - 计数规则差异:
lubridate包的wday()函数默认计数规则是周日=1,周一=2……周六=7,和多数人预期的「周一=1,周日=7」的计数逻辑不匹配,就算解析对了时间,也可能出现结果不符合预期的情况。
正确实现方法
- 第一步:先用适配你时间格式的解析函数把字符串转成标准时间对象,
dmy_hm()专门对应日-月-年 时:分的格式,不会出现解析错位。 - 第二步:调用
wday()时传入week_start = 1参数,把计数起点设为周一,符合常规的星期计数习惯。
对应代码如下:
library(lubridate) # 先按指定格式解析时间,再提取星期数 datetime_str <- "13-06-21 19:32" parsed_dt <- dmy_hm(datetime_str) # 按周一为1的规则返回星期数字 week_num <- wday(parsed_dt, week_start = 1)
校验:2021年6月13日实际为周日,按上述代码运行会返回7;如果不加
week_start=1参数,用默认规则会返回1,均为正确结果。
如果是处理数据集整列的DateTime数据,直接把列传入解析函数即可,示例:
# 假设你的数据框为df,DateTime列存原始时间字符串 df$parsed_time <- dmy_hm(df$DateTime) df$week_num <- wday(df$parsed_time, week_start = 1)
内容的提问来源于stack exchange,提问作者PRATHAM SINGH
相关产品推荐
相关产品推荐

