如果满足特定字,则R统计时间范围之间的事件

如果满足特定字,则R统计时间范围之间的事件,r,events,count,data.table,R,Events,Count,Data.table,我有一个难题,我希望你们这些友好的人能帮助我 我有一个数据集df1,其中包括可变的公司id、日期、第3天、第3天、, 每个id代表一个公司股票代码 数据集新闻包括可变的公司id、日期、新闻标题和权重 我想在datasetdf1中创建两个变量event1和event2 event1=它统计时间范围[df1$range-3,df2$range+3]之间datasetnews中newstile的事件,其中news$newstitle包含每个df$id的顺序 event2=它统计时间范围[df1$ran

我有一个难题,我希望你们这些友好的人能帮助我

我有一个数据集df1,其中包括可变的公司id、日期、第3天、第3天、, 每个id代表一个公司股票代码

数据集新闻包括可变的公司id、日期、新闻标题和权重

我想在datasetdf1中创建两个变量event1和event2

event1=它统计时间范围[df1$range-3,df2$range+3]之间datasetnews中newstile的事件,其中news$newstitle包含每个df$id的顺序

event2=它统计时间范围[df1$range-3,df2$range+3]之间的newstile事件,其中news$newstitle包含每个事件的红利df@id

为了更好地理解,我已经重写了我的问题。我真的很感谢你的帮助

最好的

我的初始过程:

1:按id内部合并df1和新闻

2:设置虚拟事件1=1,如果 日期3之前、日期3之后和 新闻标题包含顺序 如果出现以下情况,则将虚拟事件2设置为1 日期3之前、日期3之后和 新闻标题包含股息

3:折叠事件1事件2字节ID,日期

setDT(df1,key="id")
setDT(news,key="id")
%inner merge
df<-df1[news,]

%set dummy event1, something wrong here 
df[newstitle=="order",event1:=as.numeric(between(newsdate,date_bef3,date_aft3))]

根据您在下面的评论,我相信您想要的是:

# Make dates actual dates instead of factors
library(lubridate)
df1$date_bef3 <- ymd(df1$date_bef3)
df1$date_aft3 <- ymd(df1$date_aft3)
news$date     <- ymd(news$date)

event1 = sum(news$newstitle[news$id == df1$id & df1$date_bef3 <= news$date & df1$date_aft3 >= news$date]=="new order")
event2 = sum(news$newstitle[news$id == df1$id & df1$date_bef3 <= news$date & df1$date_aft3 >= news$date]=="dividend payment")

首先,提供一个数据集,其中日期作为日期给出,以及一个表示示例所需输出的表。请参阅以获取指导。我不认为有任何必要包括+/-3天列。我写了一个答案,但我一定是糊涂了。听起来你想基于文本进行某种形式的匹配,但是只有一列文本,那么我应该如何匹配它呢;选择*sum case when news$newsttitle=order as event1,sum case when news$newsttitle=股息as event2,from df1,new where news$date介于df$date_bf3和df$date_af3之间,news$id=df$id@changjx好的,我更新了我的答案。另外,请注意,您可以通过加载sqldf包在R对象上使用SQL语句,尽管我认为这种SQL是无效的。
setDT(df1,key="id")
setDT(news,key="id")
%inner merge
df<-df1[news,]

%set dummy event1, something wrong here 
df[newstitle=="order",event1:=as.numeric(between(newsdate,date_bef3,date_aft3))]
# Make dates actual dates instead of factors
library(lubridate)
df1$date_bef3 <- ymd(df1$date_bef3)
df1$date_aft3 <- ymd(df1$date_aft3)
news$date     <- ymd(news$date)

event1 = sum(news$newstitle[news$id == df1$id & df1$date_bef3 <= news$date & df1$date_aft3 >= news$date]=="new order")
event2 = sum(news$newstitle[news$id == df1$id & df1$date_bef3 <= news$date & df1$date_aft3 >= news$date]=="dividend payment")