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

R使用ceiling/floor date函数批量将多列月度数据转日度数据

R月度宽表批量扩展为日度数据方案

你需要批量处理所有ticker列时不需要手动指定列名,可通过dplyr的分组+批量列操作实现,逻辑是按原月度日期分组后生成当月日度序列,自动复用当月所有ticker的固定值,代码如下:

首先加载依赖包:

library(tidyverse)
library(lubridate)

主流实现方案(适配dplyr 1.1.0及以上版本)

result <- mydata %>%
  # 统一日期格式
  mutate(date = ymd(date)) %>%
  # 按原月度日期分组,每组对应单月的所有ticker取值
  group_by(date) %>%
  reframe(
    # 生成当月所有日度日期
    date = seq.Date(
      from = floor_date(date, unit = "month"),
      to = ceiling_date(date, unit = "month") - days(1),
      by = "day"
    ),
    # 批量处理所有非date列,自动复用当前分组的唯一月度值,适配任意数量ticker列
    across(-date, first)
  ) %>%
  ungroup() %>%
  as.data.frame()

低版本dplyr兼容方案

如果你的dplyr版本较低没有reframe函数,可使用行处理+列表展开的方式实现,同样不需要手动指定ticker列:

result <- mydata %>%
  mutate(date = ymd(date)) %>%
  # 逐行处理单月数据
  rowwise() %>%
  mutate(
    # 生成当月日度日期列表
    date = list(seq.Date(
      from = floor_date(date, unit = "month"),
      to = ceiling_date(date, unit = "month") - days(1),
      by = "day"
    ))
  ) %>%
  # 展开日期列表,其他列自动跟随重复为当月固定值
  unnest(date) %>%
  as.data.frame()

方案说明

两种方案都不需要手动指定任意ticker列名,会自动保留所有原始列的取值,最终输出结构为:每行对应单个自然日,所有ticker列取值为该行日期所属月度的原始月度值,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:54:01