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

如何基于年份复制行数据,扩展州政策数据集(优先dplyr方案)

问题描述

现有一份州政策数据集,仅记录政策发生变化的年份,示例数据如下:

df_have <- data.frame(state = c("AL", "AL", "AL", "AK", "AK", "AZ"),
                 year= c(2015, 2017, 2020, 2015, 2019, 2015),
                 policy= c(1, 2, 3, 1, 2, 1))

需要将数据集扩展至所有中间年份,复制上一年的政策值直到新政策出现,最终目标数据集如下:

df_want <- data.frame(state = c("AL", "AL", "AL", "AL", "AL", "AL", "AK", "AK", "AK", "AK", "AK", "AK", "AZ", "AZ", "AZ", "AZ", "AZ", "AZ"),
                 year= c(2015, 2016, 2017, 2018, 2019, 2020, 2015, 2016, 2017, 2018, 2019, 2020, 2015, 2016, 2017, 2018, 2019, 2020),
                 policy= c(1, 1, 2, 2, 2, 3, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1))
dplyr解决方案

结合dplyr和tidyr的函数可以快速实现需求,代码如下:

library(dplyr)
library(tidyr)

df_result <- df_have %>%
  group_by(state) %>%
  complete(year = full_seq(year, 1)) %>%
  fill(policy, .direction = "down") %>%
  ungroup()

代码说明

  • group_by(state):按州分组,保证每个州的年份补全逻辑独立执行
  • complete(year = full_seq(year, 1)):生成该州记录年份的连续序列,补全中间缺失的年份,此时新增年份的policy值为NA
  • fill(policy, .direction = "down"):将上一个非NA的政策值向下填充,实现"复制上一年政策直到新变化"的效果
  • ungroup():取消分组,回归普通数据框格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:46:01