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

R语言:合并多列日期为单列并转换格式的方法求助

宽数据转长数据+日期格式转换的R解决方案

嘿,刚接触R不用慌,你的需求其实就是典型的宽数据转长数据操作,再加上日期格式转换,这俩在R里有非常成熟的工具,我给你推荐两个常用的方案,上手都很顺:

推荐方案1:用tidyr::pivot_longer(tidyverse生态,更主流)

这是tidyverse包组里的新函数,语法清晰灵活,是现在处理宽转长的首选。步骤如下:

  1. 先加载tidyverse包(如果没安装,先跑install.packages("tidyverse"))
  2. 用pivot_longer把所有日期列合并成date和recovered两列
  3. 去掉日期列名开头的X,再转换为日期格式

代码示例:

# 加载包
library(tidyverse)

# 假设你的数据集名为df
df_processed <- df %>%
  # 把所有X开头的列转成长格式
  pivot_longer(
    cols = starts_with("X"),          # 匹配所有以X开头的日期列
    names_to = "date",                # 原列名存入date列
    values_to = "recovered"           # 原列值存入recovered列
  ) %>%
  # 处理日期格式:去掉开头的X,再转成Date类型
  mutate(date = as.Date(str_remove(date, "^X"), format = "%Y.%m.%d"))

小提示:

如果你的日期列命名规则有变化(比如不是都以X开头),可以用正则匹配来精准选中日期列,比如:

cols = matches("\\d{4}\\.\\d{2}\\.\\d{2}")  # 匹配所有YYYY.MM.DD格式的列名

备选方案2:用reshape2::melt(经典宽转长函数)

如果你习惯用reshape2包,也可以用melt函数实现同样的效果:

  1. 安装并加载reshape2包(install.packages("reshape2"))
  2. 用melt指定ID列为Country.Region,生成长格式数据
  3. 处理日期格式

代码示例:

library(reshape2)

# 宽转长
df_long <- melt(df, 
                id.vars = "Country.Region", 
                variable.name = "date", 
                value.name = "recovered")

# 转换日期格式
df_long$date <- as.Date(sub("^X", "", df_long$date), format = "%Y.%m.%d")

两种方案都能完美实现你的需求,个人更推荐第一个,因为tidyverse的函数链写法更清晰,后续做其他数据清洗也更连贯~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:13:16