You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拆分R数据框2020M07格式日期列并绘制分组折线图?

解决方案:从自定义日期格式提取年月并优化ggplot折线图

一、新增年份与月份列的方法

方法1:字符串截取(类似Excel LEFT/RIGHT思路)

完全可以通过dplyr::mutate结合字符串截取实现,和Excel逻辑一致:

df_syss_natt <- df_syss_natt %>%
  mutate(
    år = substr(månad, 1, 4),          # 提取前4位作为年份
    månad_nr = as.integer(substr(månad, 6, 7))  # 提取最后2位作为月份并转成整数
  )

方法2:lubridate日期解析(更健壮的规范处理)

既然已加载lubridate,可以先将自定义格式转为标准日期,再提取年月,避免字符串截取的潜在错误:

df_syss_natt <- df_syss_natt %>%
  mutate(
    datum = ym(månad),                 # 将"2020M07"解析为当月第一天的日期
    år = year(datum),                  # 提取年份
    månad_nr = month(datum, label = TRUE)  # 提取月份缩写(如"Jul"),适合x轴展示;要数字则设label=FALSE
  )

方法3:tidyr拆分字符串(一步到位的tidyverse风格)

用tidyr::separate直接按分隔符"M"拆分列,自动转类型:

df_syss_natt <- df_syss_natt %>%
  separate(månad, into = c("år", "månad_nr"), sep = "M", convert = TRUE)

convert=TRUE会自动把年份、月份转为数值类型,无需额外转换。

二、优化后的ggplot绘图代码

基于上述任意方法生成的列,即可按年份分组绘制折线,x轴仅显示月份:

ggplot(df_syss_natt, aes(x = månad_nr, y = syss_natt, color = år, group = år)) +
  geom_point() +
  geom_line() +
  labs(
    x = "月份",
    y = "夜间就业人数",
    color = "年份",
    title = "各年份夜间就业人数月度趋势"
  ) +
  theme_minimal()
  • color=år让不同年份折线用颜色区分
  • group=år确保同一年份的点被正确连接
  • 若用lubridate的label=TRUE,x轴会自动显示月份缩写,避免拥挤

三、完整修改后的代码(以separate方法为例)

library(pxweb)
library(tidyverse)
library(astsa)
library(forecast)
library(scales)
library(plotly)
library(zoo)
library(lubridate)

# PXWEB 查询
pxweb_query_list_BAS <- 
  list("Region"=c("22"),
       "Kon" =c("1+2"),
       "SNI2007" =c("A-U+US"),
       "ContentsCode"=c("000005F3"))

# 下载数据
px_data_BAS <- 
  pxweb_get(url = "https://api.scb.se/OV0104/v1/doris/sv/ssd/START/AM/AM0210/AM0210B/ArbStDoNMN",
            query = pxweb_query_list_BAS)

# 转换为数据框并处理日期
df_syss_natt <- as.data.frame(px_data_BAS, column.name.type = "text", variable.value.type = "text") %>%
  rename(syss_natt = 'sysselsatta efter bostadens belägenhet') %>%
  filter(månad > "2020") %>%  # 注意månad是字符型,需加引号
  separate(månad, into = c("år", "månad_nr"), sep = "M", convert = TRUE)

# 绘制优化后的折线图
ggplot(df_syss_natt, aes(x = månad_nr, y = syss_natt, color = factor(år), group = år)) +
  geom_point(size = 2) +
  geom_line(linewidth = 1) +
  labs(
    x = "月份",
    y = "夜间就业人数",
    color = "年份",
    title = "瑞典某地区夜间就业人数月度趋势(2020年起)"
  ) +
  scale_x_continuous(breaks = 1:12) +  # 强制显示1-12月刻度
  theme_minimal()

内容的提问来源于stack exchange,提问作者Christian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 05:36:00