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

如何基于df1日期为df2的pe_ratio创建不含当期值的滞后变量?

R语言创建PE比率滞后衍生变量的解决方案

核心思路

先把两个数据框按日期合并,确保df1的所有日期都被保留;接着按日期排序,用滞后函数提取当前日期之前n天的PE比率值生成衍生变量,这些变量自然不会包含当前日期的PE比率。

示例数据

先定义示例的df1和df2:

df1 <- data.frame(date = as.Date(c("2023-01-03", "2023-01-04", "2023-01-05")))
df2 <- data.frame(
  date = as.Date(c("2023-01-01", "2023-01-02", "2023-01-03", "2023-01-04", "2023-01-05")),
  pe_ratio = c(15.2, 16.1, 15.8, 16.5, 17.0)
)

基础实现(滞后1、2天)

用dplyr和lubridate包完成操作:

library(dplyr)
library(lubridate)

# 合并数据并按日期排序
merged_df <- df1 %>%
  left_join(df2, by = "date") %>%
  arrange(date)

# 创建指定的滞后变量
df3 <- merged_df %>%
  mutate(
    pe_ratio_minus_1 = lag(pe_ratio, n = 1), # 前1天的PE比率
    pe_ratio_minus_2 = lag(pe_ratio, n = 2)  # 前2天的PE比率
  ) %>%
  select(date, pe_ratio_minus_1, pe_ratio_minus_2) # 保留需要的列

# 查看结果
print(df3)

期望输出

date pe_ratio_minus_1 pe_ratio_minus_2
1 2023-01-03             16.1             15.2
2 2023-01-04             15.8             16.1
3 2023-01-05             16.5             15.8

批量创建多个滞后变量

如果需要一次性生成1到5天的滞后变量,用across函数简化代码:

# 定义需要生成的滞后天数
lag_days <- 1:5

df3 <- merged_df %>%
  mutate(across(all_of(lag_days), 
                ~lag(pe_ratio, n = .x),
                .names = "pe_ratio_minus_{.col}")) %>%
  select(date, starts_with("pe_ratio_minus_"))

注意事项

  • 必须确保数据按日期排序,否则lag函数会取错对应的值;
  • 如果df2存在缺失的日期,建议先用tidyr::complete(date = seq(min(date), max(date), by = "day"))补全日期,缺失的PE比率可以用NA或插值填充,避免滞后变量取值错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:44:58