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

如何用R按ID和年份计算面板数据当前值与起始值的比率

按ID计算面板数据的当期Value与起始Value比值(Ratio)

核心思路

先确保每组(按ID)内的数据按时间顺序排列,提取每组起始期的Value作为基准,最后用当期Value除以该基准得到Ratio。

Python(Pandas)实现

1. 构造示例数据

import pandas as pd

data = {
    'ID': [1,1,1,2,2,2],
    'Value': [10,12,13,20,25,22],
    'Year': [2020,2021,2022,2020,2021,2022],
    'Qtr': [1,1,1,1,1,1]
}
df = pd.DataFrame(data)

2. 排序并计算Ratio

# 按ID、Year、Qtr排序,保证每组内数据按时间顺序排列
df = df.sort_values(by=['ID', 'Year', 'Qtr'])

# 按ID分组,提取每组第一个Value作为起始基准值
df['Start_Value'] = df.groupby('ID')['Value'].transform('first')

# 计算Ratio
df['Ratio'] = df['Value'] / df['Start_Value']

处理后结果

ID  Value  Year  Qtr  Start_Value  Ratio
0   1     10  2020    1           10    1.0
1   1     12  2021    1           10    1.2
2   1     13  2022    1           10    1.3
3   2     20  2020    1           20    1.0
4   2     25  2021    1           20    1.25
5   2     22  2022    1           20    1.1

R语言(dplyr)实现

library(dplyr)

# 构造示例数据
df <- data.frame(
  ID = c(1,1,1,2,2,2),
  Value = c(10,12,13,20,25,22),
  Year = c(2020,2021,2022,2020,2021,2022),
  Qtr = c(1,1,1,1,1,1)
)

# 排序并计算Ratio
df <- df %>%
  arrange(ID, Year, Qtr) %>%
  group_by(ID) %>%
  mutate(Start_Value = first(Value),
         Ratio = Value / Start_Value) %>%
  ungroup()

注意事项

  • 必须先按ID+Year+Qtr排序,否则可能取到非起始期的Value作为基准,导致结果错误。
  • 如果同一ID存在重复时间记录,需先处理重复值,确保每个ID的每个时间点仅一条数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:18:26