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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:05:42