如何在R中为不同省份生成跨年度价格差值(Delta)变量
解决方案
首先注意你的Price列是带逗号的字符型,第一步需要先转换为数值型才能计算差值:
# 替换逗号为小数点,转换为数值 Data$Price <- as.numeric(gsub(",", ".", Data$Price))
方法1:基础R实现(无需额外包)
利用ave()函数按省份分组计算差值:
Data$Diff_Price <- ave(Data$Price, Data$Province, FUN = function(x) c(NA, diff(x))) # 把结果的小数点转回逗号(匹配预期输出格式) Data$Price <- format(Data$Price, decimal.mark = ",") Data$Diff_Price <- ifelse(is.na(Data$Diff_Price), NA, format(Data$Diff_Price, decimal.mark = ","))
方法2:tidyverse包实现(更简洁直观)
用dplyr的分组+滞后函数处理逻辑更清晰:
library(dplyr) Data <- Data %>% mutate(Price = as.numeric(gsub(",", ".", Price))) %>% group_by(Province) %>% mutate(Diff_Price = Price - lag(Price)) %>% ungroup() %>% # 转回带逗号的格式 mutate( Price = format(Price, decimal.mark = ","), Diff_Price = ifelse(is.na(Diff_Price), NA, format(Diff_Price, decimal.mark = ",")) )
运行后得到的结果与预期一致:
Year Province Price Diff_Price 1 2004 0101 1,02 <NA> 2 2004 0102 1,50 <NA> 3 2004 0103 1,70 <NA> 4 2005 0101 1,25 0,23 5 2005 0102 1,56 0,06 6 2005 0103 1,78 0,08 7 2006 0101 1,32 0,07 8 2006 0102 1,65 0,09 9 2006 0103 1,88 0,1
内容的提问来源于stack exchange,提问作者VBo
相关产品推荐
相关产品推荐

