使用Lubridate包在R中为时序数据合并年月列
解决方法
1. 生成标准日期列(优先用lubridate)
直接用lubridate::make_date()函数,把Year和Month字段转换成标准的Date类型,一步到位生成每月第一天的日期(适配月度时序数据),再整理成仅含date和value的数据集:
df_processed <- df %>% mutate(date = make_date(Year, Month), # 生成标准日期格式 value = Value) %>% # 重命名Value列为value(按需调整) select(date, value) # 保留目标列
2. 转换为ts时序对象
ts对象不需要依赖date列,仅需数值序列、起始时间和频率即可生成。我们可以从处理好的数据集中提取value列,结合数据的起始年月生成ts对象:
# 获取数据的起始年月 start_point <- c(min(df$Year), min(df$Month[df$Year == min(df$Year)])) # 生成月度时序对象 ts_obj <- ts(df_processed$value, start = start_point, frequency = 12)
关于你尝试的unite方法
你之前用unite得到的是字符串格式的年月组合,需要额外转换才能成为标准日期类型,不如make_date()简洁。如果一定要用unite,可补全转换步骤:
df_unite <- df %>% unite(date_str, Year, Month, sep = "-") %>% mutate(date = ymd(paste0(date_str, "-01"))) %>% # 补全日期为当月第一天,转成Date类型 select(date, value = Value)
内容的提问来源于stack exchange,提问作者Daniel James
相关产品推荐
相关产品推荐

