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

在R中计算股票每日对数收益率:分组与首行保留问题

解决分组计算股票每日对数收益率的问题

问题分析

你当前的代码存在两个核心问题:

  • diff(log(df$price))是全局计算,没有利用group_by(ticker)的分组信息,导致跨股票计算收益率
  • diff会直接移除首行,无法保留原始行数并标记缺失值

解决方案

利用dplyr的分组计算能力,结合lag()函数实现按股票分组计算对数收益率,同时保留首行并标记为NA或0。

完整代码示例

library(tidyverse)

# 测试数据构建
df <- tibble(
  Date = c(
    '01.11.2019',
    '04.11.2019',
    '05.11.2019',
    '06.11.2019',
    '07.11.2019',
    '08.11.2019'
  ),
  ACCR.PK = c(0.0035, 0.003, 0.0035, 0.0057, 0.0032, 0.0032),
  SWGI.PK = c(0.51, 0.51, 0.51, 0.51, 0.51, 0.51),
  HURC.OQ = c(35.53, 35.62, 35.76, 35.52, 35.6, 36)
) %>% 
  mutate(Date = as.Date(Date, format = "%d.%m.%Y")) %>%
  pivot_longer(-Date, names_to = "ticker", values_to = "price") %>%
  group_by(ticker) %>%  # 正确的分组方式,需链式调用
  mutate(
    # 计算对数收益率:log(当日价格/前一日价格) = log(当日) - log(前一日)
    log_return = log(price) - lag(log(price)),
    # 可选:将首行的NA替换为0
    log_return = replace_na(log_return, 0)
  ) %>%
  ungroup()  # 可选:取消分组,方便后续全局操作

# 查看结果
print(df)

代码说明

  1. 正确分组:使用%>% group_by(ticker)链式调用,确保后续计算按股票分组执行
  2. 对数收益率计算:
    • lag(log(price))会获取当前股票前一行的对数价格
    • 两者相减得到当日对数收益率,首行因无前一日数据会返回NA
  3. 首行处理:使用replace_na(log_return, 0)将首行的NA替换为0,若不需要替换则删除该行即可
  4. 大数据适配:该方法基于dplyr的向量化分组计算,处理4000只股票的年度数据效率较高

输出示例

# A tibble: 18 × 4
   Date       ticker   price log_return
   <date>     <chr>    <dbl>      <dbl>
 1 2019-11-01 ACCR.PK 0.0035     0     
 2 2019-11-04 ACCR.PK 0.003     -0.154 
 3 2019-11-05 ACCR.PK 0.0035     0.154 
 4 2019-11-06 ACCR.PK 0.0057     0.494 
 5 2019-11-07 ACCR.PK 0.0032    -0.584 
 6 2019-11-08 ACCR.PK 0.0032     0     
 7 2019-11-01 SWGI.PK 0.51       0     
 8 2019-11-04 SWGI.PK 0.51       0     
 9 2019-11-05 SWGI.PK 0.51       0     
10 2019-11-06 SWGI.PK 0.51       0     
11 2019-11-07 SWGI.PK 0.51       0     
12 2019-11-08 SWGI.PK 0.51       0     
13 2019-11-01 HURC.OQ 35.5       0     
14 2019-11-04 HURC.OQ 35.6       0.00253
15 2019-11-05 HURC.OQ 35.8       0.00392
16 2019-11-06 HURC.OQ 35.5      -0.00674
17 2019-11-07 HURC.OQ 35.6       0.00225
18 2019-11-08 HURC.OQ 36.0       0.0112 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:35:20