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

如何用dplyr在R中对齐按日期索引的股票数据?

股票数据按日期对齐(dplyr实现)

原始数据获取代码

._883<-quantmod::getSymbols("0883.HK",from="2022-04-21",to="2022-12-22",auto.assign = FALSE)
._600938<-quantmod::getSymbols("600938.SS",from="2022-04-21",to="2022-12-22",auto.assign = FALSE)

._883<-._883[,6]
._600938<-._600938[,6]
spread<-data.frame(._883,._600938)

> length(._883)
[1] 169
> length(._600938)
[1] 165

这段代码通过quantmod包获取了0883.HK和600938.SS两只股票2022年4月21日至12月22日的收盘价数据,其中._883有169条记录,._600938有165条记录,二者均以日期为索引。需求是用dplyr包找出._600938中的缺失数据,删除对应整行(包括._883的对应行)实现日期对齐。


dplyr实现方案

方法一:转换为数据框后连接过滤

先将两个时间序列转为带日期列的数据框,再通过连接和过滤实现对齐:

library(dplyr)
library(tibble)

# 转换._883为带日期列的tibble
df_883 <- ._883 %>%
  as.data.frame() %>%
  rownames_to_column(var = "date") %>%
  rename(close_883 = ._883) %>%
  mutate(date = as.Date(date))

# 转换._600938为带日期列的tibble
df_600938 <- ._600938 %>%
  as.data.frame() %>%
  rownames_to_column(var = "date") %>%
  rename(close_600938 = ._600938) %>%
  mutate(date = as.Date(date))

# 按日期左连接,过滤掉._600938收盘价缺失的行
aligned_data <- df_883 %>%
  left_join(df_600938, by = "date") %>%
  filter(!is.na(close_600938))

# 计算价差
aligned_data <- aligned_data %>%
  mutate(spread = close_600938 - close_883)

方法二:利用xts内连接快速对齐

直接对xts对象做内连接,只保留双方都存在的日期,再转换为数据框处理:

library(dplyr)
library(xts)

# 内连接合并两个xts对象,自动对齐日期
merged_data <- merge(._883, ._600938, join = "inner") %>%
  as.data.frame() %>%
  rownames_to_column("date") %>%
  mutate(date = as.Date(date)) %>%
  rename(close_883 = ._883, close_600938 = ._600938) %>%
  mutate(spread = close_600938 - close_883)

你尝试的替代方法问题分析

你写的代码:

x<-cbind(._883,._600938)
na.omit(x)
x$spread<-x[,2]-x[,1]

存在两个核心问题:

  1. na.omit(x)的结果没有赋值回变量,后续计算价差还是用的原始带NA的数据集,等于白做了过滤。
  2. 正确的写法应该是把过滤后的结果赋值给新变量,再基于它计算价差:
x <- cbind(._883, ._600938)
x_clean <- na.omit(x)
x_clean$spread <- x_clean[,2] - x_clean[,1]

这种方法本质是删除所有含NA的行,因为._883没有缺失值,所以效果和需求一致,但dplyr的写法更灵活,方便后续扩展数据处理逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 02:50:30