两个数据帧之间的动态合并
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
我有两个数据框。第一个 (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