首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果遇到特定的单词,r会在时间范围内计数事件。

如果遇到特定的单词,r会在时间范围内计数事件。
EN

Stack Overflow用户
提问于 2017-07-22 14:55:30
回答 1查看 52关注 0票数 0

我有个难题,我希望你们友好的人能帮我。

我有一个数据集(df1),其中包括可变的公司id、日、日-3、day+3,每个id代表一个公司代码。

数据集(新闻)包括可变公司id、日、新闻、权重。

我想在dataset中创建两个变量event1和event2 (Df1)

event1 =它从dataset(新闻)中计数在范围为1$range-3之间的newstile事件,带有新闻$newstitle的df2$range+3包含每个df$id的“顺序”。

event2 =它计算在范围为1$range-3之间的newstile事件,带有新闻$newstitle的df2$range+3包含每个df@id的“股息”。

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

最好的。

代码语言:javascript
复制
#this would be desired result with new vars event1,event2 
out <- read.table(text="
                   id,date,date_bef3,date_aft3,event1,event2        
                   1605,1992/12/15,1992/12/12,1992/12/18,0,0
                   1705,1992/12/30,1992/12/27,1993/1/2,1,1
                   3412,1992/12/31,1992/12/28,1993/1/3,0,0  
                   9921,1993/1/7,1993/1/4,1993/1/10,0,0
                   2314,1993/1/18,1993/1/15,1993/1/21,1,0",
                   header=T,sep=",")

#this is index data
df1<-out[,-c(5,6)]

#this is simulated news source data
news<- read.table(text="
                  id,date,newstitle,weight  
                  2543,1992/12/30,new order,1
                  1705,1992/12/29,dividend payment,1
                  1705,1993/1/1,new order,1
                  9921,1993/1/1,new product,1
                  2314,1993/1/16,new order,1",
                  header=T,sep=",")

它类似于这样的sql代码:

代码语言:javascript
复制
proc sql;select *
  sum (case when news$newstitle="order" ) as event1,
  sum (case when news$newstitle="dividend" ) as event2,
from df1,new
where news$date between df$date_bf3 and df$date_af3 ,
news$id=df$id

我的初始进程:

1:通过"id“将df1和新闻内部合并

2:如果(date_bef3,date_aft3)和newstitle之间的新日期(date_bef3,date_aft3)和新项目包含"order“,则设置虚拟event2=1 (如果在(date_bef3,date_aft3)和新项目之间的新日期包含”股息“,则设置虚拟event2=1

3:按(id,日期)折叠(sum)event1 event2

代码语言:javascript
复制
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))]
EN

回答 1

Stack Overflow用户

发布于 2017-07-22 15:28:14

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

代码语言:javascript
复制
# 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")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45255898

复制
相关文章

相似问题

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