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

Dynamic Merge between two data frames

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

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

 merge(ERdata, companydata)

但是,如果收益发布是 BeforeOpen,则它必须显示前一天(date-1)的收盘价。这意味着我必须以某种方式在合并命令中包含 IF 子句或其他内容。

示例:

ER数据:

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

公司数据:

 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 的行,它就像简单的合并命令一样。对于具有 BeforeOpen 的行,它必须使用 "date-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