使用自定义数值更新R数据集:扩展2012-2013年季度数据
解决方案
方法一:基础R实现
基于原数据集复制出2012、2013年的对应数据,再合并到原数据集中:
# 原数据集定义 df <- data.frame(id = c(1,2,1,2), year = c(2010,2010,2011,2011), quarter = c("2010-q1","2010-q2","2011-q1","2011-q2"), price = c(10,50,10,50)) # 生成2012年数据:复制原数据后替换年份和季度 df_2012 <- df df_2012$year <- 2012 df_2012$quarter <- gsub("201[01]", "2012", df_2012$quarter) # 生成2013年数据:同理替换年份和季度 df_2013 <- df df_2013$year <- 2013 df_2013$quarter <- gsub("201[01]", "2013", df_2013$quarter) # 合并原数据与新增数据 df_expanded <- rbind(df, df_2012, df_2013)
gsub("201[01]", "2012", ...) 可批量替换季度字符串中的年份部分,无需手动修改每一行的季度值,更高效。
方法二:tidyverse工具包实现
借助dplyr和tidyr的函数,更简洁地生成扩展数据集:
library(dplyr) library(tidyr) df <- data.frame(id = c(1,2,1,2), year = c(2010,2010,2011,2011), quarter = c("2010-q1","2010-q2","2011-q1","2011-q2"), price = c(10,50,10,50)) df_expanded <- df %>% group_by(id, price) %>% # 按id和价格分组,保证每个id的价格不变 expand( year = 2010:2013, # 生成目标年份范围 quarter = paste0(year, "-q", rep(1:2, times = length(year))) # 拼接对应季度 ) %>% ungroup()
这种方法直接通过expand生成所需的年份和季度组合,无需手动复制数据集,代码更简洁易维护。
内容的提问来源于stack exchange,提问作者silent_hunter
相关产品推荐
相关产品推荐

