【发布时间】:2015-01-29 09:18:07
【问题描述】:
我有两个数据框,如下:
带有交易的数据框:tradeData(示例):
Login OpenTime CloseTime Decision
859 13/01/2014 13/01/2014 1
859 16/01/2014 16/01/2014 1
859 21/01/2014 21/01/2014 1
859 21/01/2014 21/01/2014 1
859 22/01/2014 22/01/2014 1
859 23/01/2014 23/01/2014 1
859 27/01/2014 27/01/2014 1
859 03/02/2014 03/02/2014 1
859 04/02/2014 05/02/2014 1
859 07/02/2014 07/02/2014 1
859 11/02/2014 13/02/2014 1
939 06/02/2014 28/02/2014 1
939 06/02/2014 28/02/2014 1
939 06/02/2014 28/02/2014 1
1455 03/04/2014 03/04/2014 1
1455 04/04/2014 04/04/2014 1
1455 04/04/2014 07/04/2014 1
1455 08/04/2014 08/04/2014 1
1455 08/04/2014 08/04/2014 1
1455 09/04/2014 30/04/2014 1
1455 30/04/2014 30/04/2014 1
和另一个带有日期的数据框:datesData(示例):
Login B_A A_B
859 22/01/2014 23/01/2014
859 03/02/2014 07/02/2014
859 11/02/2014 12/02/2014
939 06/02/2014 01/01/2200
1455 04/04/2014 08/04/2014
1455 09/05/2014 30/06/2014
在 datesData 数据框中任何行的两个日期之间打开并与登录名匹配的任何交易(将是 tradeData 数据框中的一行)都应在决策列中收到 0。它必须在 B_A 列中的日期或之后打开,并且在 A_B 列中的日期之前打开。这个决策列预先填充了 1,所以我需要做的就是插入 0
生成的 tradeData 数据框如下所示:
Login OpenTime CloseTime Decision
859 13/01/2014 13/01/2014 1
859 16/01/2014 16/01/2014 1
859 21/01/2014 21/01/2014 1
859 21/01/2014 21/01/2014 1
859 22/01/2014 22/01/2014 0
859 23/01/2014 23/01/2014 1
859 27/01/2014 27/01/2014 1
859 03/02/2014 03/02/2014 0
859 04/02/2014 05/02/2014 0
859 07/02/2014 07/02/2014 1
859 11/02/2014 13/02/2014 0
939 06/02/2014 28/02/2014 0
939 06/02/2014 28/02/2014 0
939 06/02/2014 28/02/2014 0
1455 03/04/2014 03/04/2014 1
1455 04/04/2014 04/04/2014 0
1455 04/04/2014 07/04/2014 0
1455 08/04/2014 08/04/2014 1
1455 08/04/2014 08/04/2014 1
1455 09/04/2014 30/04/2014 0
1455 30/04/2014 30/04/2014 1
因此,例如,tradeData 数据框中的第五行在 22/01/2014 和 23/01/2014 之前(datesDate 数据框中的第一行)打开并匹配该行中的登录,所以它收到一个 0。
任何帮助都会很棒!如果有任何不清楚的地方,请告诉我。
谢谢!
迈克
【问题讨论】:
-
我可以建议使用
?dput发布您的数据 -
@akrun 我现在去看看,谢谢
-
@RockScience,要做到这一点,我只需在控制台中输入
dput并复制粘贴结果吗? -
嗨,迈克,我的评论高于我的澄清答案。
-
@akrun,我正在努力使用
foverlaps函数。这是我到目前为止所做的:colnames(datesData)[c(2:3)] = c("OpenTime","CloseTime")/setkey(datesData,"B_A","A_B")。foverlaps(tradeData,datesData,by.tradeData = c("OpenTime","Closetime"),by.transferDates = c("OpenTime","CloseTime"))但是,它不工作,我不知道如何解决它?