首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用单独数据框中的日期范围进行筛选-R

使用单独数据框中的日期范围进行筛选-R
EN

Stack Overflow用户
提问于 2019-04-26 17:37:24
回答 1查看 49关注 0票数 0

我正在尝试生成一个在合并发生后的过去6个月内持有目标股票的唯一投资者列表。

我有两个单独的数据框架,用于此目的:- df1包含投资者ID、股票ID、日期和股票的投资组合持有量。- df2包含收购方股票ID、目标股票ID和合并日期。

代码语言:javascript
复制
investor stock  date            portfolio holdings
629      10     01/01/1990      100
629      10     02/01/1990      100
629      10     03/01/1990      70
629      10     04/01/1990      50
629      10     05/01/1990      0
629      10     06/01/1990      0
664      10     04/01/1990      100
664      10     05/01/1990      100
664      10     06/01/1992      100
664      12     10/10/1992      100
664      12     11/10/1992      100
1020     10     12/12/1995      50
1020     10     13/12/1995      25
1020     10     14/12/1995      25
1020     10     15/12/1995      0
...      ...    ...             ...
代码语言:javascript
复制
acquirer stock  target stock    date of merger
100             10              06/01/1990
101             12              10/10/1992
102             14              15/12/1995
...             ...             ...

对于每一次合并,我想过滤掉那些在合并发生前6个月内持有目标股票数量高于0的投资者。投资者在合并之日的投资组合持有量为0并不重要,如果他们在合并前6个月内持有正成交量。

我只需要一份持有目标股票的投资者名单,如下所示。稍后,我将使用此列表作为更大数据集的过滤器。

代码语言:javascript
复制
investor
629
664
…

投资者629之所以被选中,是因为她在合并日期之前的6个月内持有10股股票。投资者664是根据她持有的股票10和12来选择的。投资者1020没有被选中,因为虽然她持有股票10,但它不是在合并日期的6个月内。

EN

回答 1

Stack Overflow用户

发布于 2019-04-28 00:45:39

首先,我对两个数据集执行merge操作。合并它们意味着执行类似join的操作。

代码语言:javascript
复制
df3 = merge (
    df1, df2,
    by.x = "stock", by.y = "target stock"
)

df3是合并后的数据集。它包含所有df1和所有df2列和行。我匹配了条件stock = target stock满足的两个数据集。请查看merge函数以了解更多详细信息(只需在R控制台中输入?merge )。

代码语言:javascript
复制
df4 = df3

tmp = sapply(
    df4[, "date of merger"], 
    function(d) as.Date(seq(d, length = 2, by = "-6 months")[2])
)

df4[, "date of merger start"] = as.Date(tmp, origin = "1970-01-01")

df4

然后我添加了一个新列。这个新列从date of merger中减去6个月:我将使用它来检查哪些行符合条件

代码语言:javascript
复制
"date of merger -6 months" <= "date" <= "date of merger"

我只保存满足条件的行:

代码语言:javascript
复制
df5 = subset(
    df4, "portfolio holdings" > 0 & "date" <= "date of merger" & "date of merger start" <= "date"
)

df5

有关详细信息,请参阅subset帮助(?subset)。

您声明您只对investor的不同值感兴趣:

代码语言:javascript
复制
unique(df5[, "investor"])

NOTES

  • 我在测试代码时遇到了一些问题,所以它可能需要一些修复,但这就是我个人解决problem
  • There的方法,您可能会发现许多不同的解决方案,我不能向您保证这是最好的解决方案
  • 代码应该优化(避免创建无用的对象,如tmpdf3df4:我添加它们作为中间步骤以便于调试/理解:)
  • 我建议使用SQLH229< code >F230从数据库执行这些操作(基本上是数据过滤)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55864797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档