【发布时间】:2018-02-27 15:59:01
【问题描述】:
ID FROM TO
1881 11/02/2013 11/02/2013
3090 09/09/2013 09/09/2013
1113 24/11/2014 06/12/2014
1110 24/07/2013 25/07/2013
111 25/06/2015 05/09/2015
如果我有假期日期的 data.table,FROM 和 TO,我想知道任何给定月份有多少人在度假。
我试过了:
dt[, .N, by=.(year(FROM), month(FROM))]
但显然它会排除两个月内休假的人。 IE。从 1 月到 2 月休假的人只会出现在 1 月的计数中,而不会出现在 2 月的计数中,即使他们仍在 2 月休假
上面代码的输出显示年、月和数字正是我要寻找的。p>
year month N
1: 2013 2 17570
2: 2013 9 16924
3: 2014 11 18809
4: 2013 7 16984
5: 2015 6 14401
6: 2015 12 10239
7: 2014 3 19346
8: 2013 5 14864
编辑:我希望每个月都有人外出度假。所以 ID 111 将在 6 月、7 月、8 月和 9 月计算。
编辑 2:
在完整数据集上运行 uwe 的代码会生成下面的 Total Count 列。
对休假 30 天的人的完整数据集进行子集化,会产生下面各列中的计数。这些相互添加的列应该等于 Total Count,因此 DIFFERENCE 应该为 0,但事实并非如此。
month Total count <=30 >30 (<=30) + (>30) DIFFERENCE
01/02/2012 899 4 895 899 0
01/03/2012 3966 2320 1646 3966 0
01/04/2012 8684 6637 2086 8723 39
01/05/2012 10287 7586 2750 10336 49
01/06/2012 12018 9080 3000 12080 62
【问题讨论】:
-
使用
melt组合FROM和TO然后分组。 -
ID 111要怎么算?仅在 2015 年 6 月和 2015 年 9 月?还是在 2015 年 6 月、7 月、8 月和 9 月?
-
我想计算 2015 年 6 月、7 月、8 月和 9 月。我想弄清楚在任何给定月份去度假的人数。 ID 111 在 2015 年 6 月、7 月、8 月和 9 月离开,因此每个月都会计算在内。
-
上述结果是您对您提供的数据的期望吗?
-
我同意 Uwe 的建议 - 最好发布一个新问题(使用可重现的数据),除非他以某种方式认识到根本问题并提供快速解决方案。
标签: r count data.table date-range