在R中如何将数值除以上一年同期值完成收益率计算?
面板数据收益率计算简便方法
核心逻辑是先按公司维度分组,再按时间升序排序后取每家公司上一期的收盘价做运算,所有主流数据分析工具都有内置函数实现,不需要手动写循环遍历每家公司。
以下是三种最常用工具的实现方式,均只需要1-2行核心代码即可完成:
1. Python(Pandas环境)
前提要求:数据集包含公司ID、年份、调整后收盘价三个必填列
- 先对数据集按公司、年份升序排序:
df = df.sort_values(by=['公司ID', '年份'], ascending=True) - 分组计算收益率:
df['收益率'] = df['调整后收盘价'] / df.groupby('公司ID')['调整后收盘价'].shift(1) - 1
说明:每家公司第一年的观测值因为没有上一年收盘价,计算得到的收益率会显示为NaN,属于正常结果
2. Stata环境
前提要求:数据集已导入,包含公司ID、年份、调整后收盘价三个变量
- 首先声明面板数据结构:
xtset 公司ID 年份 - 直接计算收益率:
gen 收益率 = 调整后收盘价 / L.调整后收盘价 - 1
说明:Stata会自动识别面板分组结构,自动跳过每家公司第一年的观测值生成缺失值
3. R(dplyr包环境)
代码实现如下:
library(dplyr) df <- df %>% arrange(公司ID, 年份) %>% group_by(公司ID) %>% mutate(收益率 = 调整后收盘价 / lag(调整后收盘价, 1) - 1) %>% ungroup()
内容的提问来源于stack exchange,提问作者student123
相关产品推荐
相关产品推荐

