我有个难题,我希望你们友好的人能帮我。
我有一个数据集(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的“股息”。
为了更好地理解,我重写了我的问题。我真的很感激你的帮助。
最好的。
#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代码:
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
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))]发布于 2017-07-22 15:28:14
根据你下面的评论,我相信你想要的是:
# 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")https://stackoverflow.com/questions/45255898
复制相似问题