R语言如何用strptime()转换日期时间文本、统计周频次以绘制散点图
错误原因排查
你运行报错的核心问题是strptime()的格式参数与输入的日期字符串不匹配:
- 格式中用了点号
., 但实际日期的星期、月份之间是空格分隔 - 仅定义了星期、月份两个匹配项,但输入的字符串还包含日、时分秒、年份字段,格式长度完全不匹配,因此会抛出输入字符串过长的错误。
完整实现步骤
1. 日期时间正确解析
首先读取文件内容,用完整匹配规则解析日期,注意如果是中文系统环境,需要先修改时间 locale 才能正确识别英文的星期、月份缩写:
# 【Windows系统】修改时间区域为英文,避免识别英文日期失败 Sys.setlocale("LC_TIME", "English") # 【Mac/Linux系统】用下面这句替代 # Sys.setlocale("LC_TIME", "en_US.UTF-8") # 读取dates.txt所有行 date_lines <- readLines("dates.txt") # 完整匹配格式:%a=星期缩写 %b=月份缩写 %d=日期 %T=时分秒 %Y=4位年份 parsed_dates <- strptime(date_lines, format = "%a %b %d %T %Y")
新手更推荐用lubridate包,不需要手动写匹配格式,代码更简洁:
# 首次使用先安装包 install.packages("lubridate") library(lubridate) parsed_dates <- dmy_hms(date_lines)
2. 按周分组统计频次
用strftime的格式符提取周数,这里可以根据你的周定义规则调整格式符:
- 用
%W:周一为一周起始,每年1月1日所在周为第0周 - 用
%U:周日为一周起始,每年1月1日所在周为第0周
# 生成带年份的周标识,避免跨年周数重复 week_labels <- strftime(parsed_dates, "%Y-%W") # 统计每周的出现频次 week_count <- as.data.frame(table(week_labels)) colnames(week_count) <- c("周标识", "频次") # 生成连续周序号作为散点图x轴 week_count$周序号 <- 1:nrow(week_count)
3. 绘制散点图
直接用R基础绘图函数即可输出你需要的效果:
plot( x = week_count$周序号, y = week_count$频次, xlab = "周数", ylab = "频次", pch = 16, # 散点样式为实心圆点 col = "darkblue", cex = 1.2 # 散点大小 )
内容的提问来源于stack exchange,提问作者homies
相关产品推荐
相关产品推荐

