寻找失踪日期从柱日期data.table R中
问题描述:
我有一个data.table DT,它看起来像:寻找失踪日期从柱日期data.table R中
> dt[1:20, c("p_date", "p_time")]
p_date p_time
1: 20170422 0916
2: 20170421 1011
3: 20170112 1528
4: 20170318 1111
5: 20170322 0957
6: 20170321 1115
7: 20170304 1532
8: 20170322 1417
9: 20170401 1242
10: 20170321 1812
11: 20170401 1821
12: 20170401 1509
13: 20170320 1655
14: 20170401 1518
15: 20170320 1444
16: 20170401 1712
17: 20170317 1021
18: 20170322 1816
19: 20170305 1056
20: 20170319 1428
我想找出哪个日期是从列的值丢失表dt的p_date。
这里的日期格式为yyyymmdd,我想找出列表中出现的最短日期和最大日期值之间的缺失日期。
输出必须是data.table有一列是缺失的日期值
我怎样才能在r中
答
做到这一点与data.table你可以定义最小和日期之间的矢量你的最大日期是这样的:
dateRangeVec <- range(as.Date(as.character(dt$p_date), format = "%Y%m%d"))
allDatesVec <- format(seq(from = dateRangeVec[1],
to = dateRangeVec[2], 'days'), "%Y%m%d")
可以使用setdiff
然后过滤所有不在你的数据表的日期:
outDt <- data.table(p_date = setdiff(allDatesVec, dt$p_date))
答
我们可以使用一个连接on
“p_date”通过提供全方位的“p_date”
dt[, p_date := lubridate::ymd(p_date)]
dt1 <- data.table(p_date = seq(min(dt$p_date), max(dt$p_date), by = '1 day'))
dt[dt1, on = 'p_date'][is.na(p_time), p_date]
或其他选项创建另一个数据集(列转换为Date
下课)是使用anti_join
从dplyr
library(dplyr)
anti_join(dt1, dt, on = 'p_date')
@nicola THX,已编辑答案相应 – ikop