R语言:合并多列日期为单列并转换格式的方法求助
宽数据转长数据+日期格式转换的R解决方案
嘿,刚接触R不用慌,你的需求其实就是典型的宽数据转长数据操作,再加上日期格式转换,这俩在R里有非常成熟的工具,我给你推荐两个常用的方案,上手都很顺:
推荐方案1:用tidyr::pivot_longer(tidyverse生态,更主流)
这是tidyverse包组里的新函数,语法清晰灵活,是现在处理宽转长的首选。步骤如下:
- 先加载tidyverse包(如果没安装,先跑
install.packages("tidyverse")) - 用
pivot_longer把所有日期列合并成date和recovered两列 - 去掉日期列名开头的
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函数实现同样的效果:
- 安装并加载reshape2包(
install.packages("reshape2")) - 用
melt指定ID列为Country.Region,生成长格式数据 - 处理日期格式
代码示例:
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
相关产品推荐
相关产品推荐

