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

如何将R语言数据框的就业列名转为日期并重塑为长格式?

R语言宽格式转长格式:提取日期字段并重塑数据

针对你提供的宽格式数据集,我们可以通过两种常用方法完成宽转长操作,同时提取字段名中的日期信息并转换为Date类型:

方法一:使用tidyverse工具(推荐)

先加载dplyr和tidyr包(未安装的话先运行install.packages("tidyverse")):

library(dplyr)
library(tidyr)

执行数据转换:

mydatafinal <- mydata %>%
  pivot_longer(
    cols = starts_with("employment_"), # 选中所有就业状态相关的宽列
    names_pattern = "employment_(.*)", # 正则提取列名中`employment_`后的日期部分
    names_to = "date", # 提取的日期存入date列
    values_to = "employment" # 原列的就业状态值存入employment列
  ) %>%
  mutate(date = as.Date(date, "%Y_%m_%d")) # 将下划线分隔的日期字符串转为Date类型

步骤说明

  • pivot_longer是宽转长的核心函数,自动为每个日期生成对应行
  • names_pattern通过正则精准捕获日期字符串,避免拆分错误
  • 最后用mutate完成日期类型转换,确保后续可进行日期相关操作

方法二:使用Base R原生函数

无需加载额外包,直接用reshape函数实现:

mydatafinal <- reshape(
  mydata,
  direction = "long", # 指定转换为长格式
  varying = grep("employment_", names(mydata), value = TRUE), # 筛选需要转换的列
  v.names = "employment", # 就业状态值的列名
  timevar = "date", # 日期列的列名
  times = sub("employment_", "", grep("employment_", names(mydata), value = TRUE)), # 提取日期字符串
  idvar = c("id", "cohort", "maledummy") # 保留的个体标识列
) %>%
  transform(date = as.Date(date, "%Y_%m_%d")) %>% # 转换日期类型
  arrange(id, date) # 按个体和日期排序,匹配示例结果顺序

验证结果

转换完成后,可通过以下代码确认结果与目标数据集一致:

# 对比手动创建的目标数据集
all.equal(mydatafinal, mydatafinal_target)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:42:43