两个数据帧之间的动态合并

时间:2018-03-26 13:11:24

标签: r finance quantitative-finance

我有两个数据框。第一个(ERdata)是关于公司的收益发布。它有“companyname”,“date”(收益发布日期)和“timing”(BeforeOpen或AfterClose)列。第二个(companydata)有“companyname”,“date”和“closingvalue”(时间范围内每天的收盘价)。

我想合并表格,以便显示收益发布前的收盘价格。这将是一个简单的合并命令:

 merge(ERdata, companydata)

但是,如果收益发布是BeforeOpen,则必须显示前一天(date-1)的收盘价。这意味着我不得不在合并命令中包含一个IF子句。

示例:

ERdata:

 companyname date timing
 AXP 2016-04-21 AfterClose
 BA 2016-04-27 BeforeOpen

companydata:

 companyname date closingvalue
 AXP 2016-04-20 50
 AXP 2016-04-21 60
 BA 2016-04-26 30
 BA 2016-04-27 35

结果:

 companyname date timing closingvalue
 AXP 2016-04-21 AfterClose 60
 BA 2016-04-27 BeforeOpen 30

可以看出,对于具有AfterClose的行,它就像简单的merge命令一样。对于具有BeforeOpen的行,它必须使用“date-1”的闭合值。有没有办法使用合并命令执行此操作?或者我应该以某种方式绕过它?

提前致谢!! : - )

1 个答案:

答案 0 :(得分:1)

你必须多给几行你的数据才能确定......但是就你所展示的内容而言,这是可行的(即,只要在日期和日期之前只有相互排斥的情况) )..

library(tidyverse)
ERdata %>% 
  inner_join(companydata, by = "companyname") %>%
  filter((timing == "AfterClose" & date.x == date.y) | 
           (timing == "BeforeOpen" & date.x != date.y))


  companyname     date.x     timing     date.y closingvalue
1         AXP 2016-04-21 AfterClose 2016-04-21           60
2          BA 2016-04-27 BeforeOpen 2016-04-26           30