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

如何在R中补全至年末日期并重复最新scalingvalue等列值

问题需求

可复现示例代码

name <- c("A","B","B","C","C","C")
date <- c('2024-01-01', '2024-01-01', '2024-02-01', '2024-01-01','2024-02-01','2024-03-01')
value <- c("1.0","1.2","1.2","0.6","0.6","0.6")
count <- c("1","1","2","1","2","3")
df <- data.frame(name,date,value,count)

df %>% group_by(name)%>%
    mutate(scalingvalue = cumsum(as.numeric(value) / n()))

当前运行结果

name       date value count  scalingvalue
 A  2024-01-01   1.0     1     1
 B  2024-01-01   1.2     1     0.6
 B  2024-02-01   1.2     2     1.2
 C  2024-01-01   0.6     1     0.2
 C  2024-02-01   0.6     2     0.4
 C  2024-03-01   0.6     3     0.6

最终目标

将每个name对应的日期补全至2024年末(即2024-12-01),新增日期对应的scalingvalue及其他列值需重复该name最新已有日期的对应值。示例目标结果如下:

name       date value count  scalingvalue
 A  2024-01-01   1.0     1     1
 B  2024-01-01   1.2     1     0.6
 B  2024-02-01   1.2     2     1.2
 C  2024-01-01   0.6     1     0.2
 C  2024-02-01   0.6     2     0.4
 C  2024-03-01   0.6     3     0.6
 C  2024-04-01   0.6     3     0.6
 C  2024-05-01   0.6     3     0.6
 C  2024-06-01   0.6     3     0.6
 C  2024-07-01   0.6     3     0.6
 C  2024-08-01   0.6     3     0.6
 C  2024-09-01   0.6     3     0.6
 C  2024-10-01   0.6     3     0.6
 C  2024-11-01   0.6     3     0.6
 C  2024-12-01   0.6     3     0.6

解决方案

可以使用dplyr、lubridate和tidyr包实现需求,代码如下:

library(dplyr)
library(lubridate)
library(tidyr)

# 预处理数据:转换日期格式并计算scalingvalue
df_processed <- df %>%
  mutate(date = ymd(date)) %>%
  group_by(name) %>%
  mutate(scalingvalue = cumsum(as.numeric(value) / n())) %>%
  ungroup()

# 补全日期并填充缺失值
df_final <- df_processed %>%
  group_by(name) %>%
  # 生成从每组最早日期到2024年末的每月第一天序列
  complete(date = seq(min(date), ymd("2024-12-01"), by = "month")) %>%
  # 将缺失列值填充为每组最后一行的有效值
  fill(value, count, scalingvalue, .direction = "downup") %>%
  ungroup()

# 输出结果
print(df_final)

代码说明

  1. 日期格式转换:将原始字符型的date列转为日期格式,为后续生成日期序列做准备。
  2. 生成完整日期序列:按name分组后,用complete()函数生成从每组最早日期到2024年末的每月第一天序列,自动补全缺失的日期行。
  3. 填充缺失值:用fill()函数把新增行的value、count、scalingvalue填充为该组最后一行的有效值,保证新增日期的列值与最新已有日期一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:05:39