r - 仅在数据帧的特定行或日期上应用具有滚动估计窗口的函数
问题描述
是否可以将具有滚动窗口的函数应用于此数据框:
Name Date market_return stock_return RESULT
AAL 1.1.15 3% 5%
AAL 2.1.15 2% 1%
...
AAPL 1.1.15 3% 4%
AAPL 2.1.15 2% 3%
...
但是,只有在匹配这些特定日期和名称时:
Name Date
AAL 4.4.15
AAL 15.6.15
...
AAPL 5.6.15
AAPL 5.7.15
...
结果应该类似于:
Name Date market_return stock_return RESULT
AAL 1.1.15 3% 5% NA
AAL 2.1.15 2% 1% NA
...
AAL 4.4.15 3% 5% xxx
...
AAL 15.6.15 3% 5% xxx
...
AAPL 1.1.15 3% 4% NA
AAPL 2.1.15 2% 3% NA
...
AAPL 5.6.15 2% 5% xxx
...
AAPL 5.7.15 2% 5% xxx
...
谢谢!
解决方案
这个问题不是关于要执行的操作的具体问题,所以我们假设它是总和。
在最后的注释中,我们首先将数据读入数据帧,将Date
列转换为Date
类,将_return
列转换为数值。
在名称和日期上将 DF 左连接到 DF2,在日期范围和名称上将 DF2 左连接到 DF,然后将 DF 的第二个实例中连接到 DF 的第一个实例的每一行的所有 stock_return 求和。
library(sqldf)
sqldf("select a.*, sum(b.stock_return) as RESULT
from DF a
left join DF2 c on a.Name = c.Name and a.Date = c.Date
left join DF b on b.Date between c.Date - 185 and c.Date + 185 and
c.Name = b.Name
group by a.rowid")
给予:
Name Date market_return stock_return RESULT
1 AAL 2015-01-01 3 3 NA
2 AAL 2015-01-02 2 2 NA
3 AAL 2015-04-04 3 3 11
4 AAL 2015-06-15 3 3 11
5 AAPL 2015-01-01 3 3 NA
6 AAPL 2015-01-02 2 2 NA
7 AAPL 2015-06-05 2 2 9
8 AAPL 2015-07-05 2 2 9
笔记
Lines <- "Name Date market_return stock_return
AAL 1.1.15 3% 5%
AAL 2.1.15 2% 1%
AAL 4.4.15 3% 5%
AAL 15.6.15 3% 5%
AAPL 1.1.15 3% 4%
AAPL 2.1.15 2% 3%
AAPL 5.6.15 2% 5%
AAPL 5.7.15 2% 5%"
DF <- read.table(text = Lines, header = TRUE, as.is = TRUE)
DF <- transform(DF, Date = as.Date(Date, "%d.%m.%y"),
market_return = as.numeric(sub("%", "", market_return)),
stock_return = as.numeric(sub("%", "", stock_return)))
Lines <- "Name Date
AAL 4.4.15
AAL 15.6.15
AAPL 5.6.15
AAPL 5.7.15"
DF2 <- read.table(text = Lines, header = TRUE, as.is = TRUE)
DF2$Date <- as.Date(DF2$Date, "%d.%m.%y")
更新
简化。
推荐阅读
- discord.js - discord.js 创建一个类别然后在所述类别内创建频道
- vba - 在 VBA 中查找差异和比较日期
- asp.net-core - Net Core 中的 WebApi 使用 RabbitMQ
- rust - 如何在 Rust 中创建缓存对象工厂?
- spring-boot - Spring Tool Suite 如何退出调试视角
- angular - Angular 11:如何调试 html 中的变量?
- haskell - 如何在 Haskell 中实现状态图?
- python - ModuleNotFoundError:没有名为“dateutil”的模块,但已满足要求
- c - ld:找不到符号的版本节点
- javascript - 当我将鼠标悬停时,自动计算 div 的高度并打开它