我有两个数据框。第一个(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”的闭合值。有没有办法使用合并命令执行此操作?或者我应该以某种方式绕过它?
提前致谢!! : - )
答案 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