我正在尝试创建一个标记,用于识别超过2天的时间戳数据中的间隔。This question almost accomplishes what I need,但我的时间数据在单个列中,而不是开始和结束列中。另外,我使用的是data.table
。现在,我正在尝试使用diff()
,但我认为这可能可以使用lag()
来完成,就像在链接的问题中一样。
到目前为止,我有这样的想法:
library(data.table)
myID <- c(1,1,1,1,1,1,2,2,2,2,2,2)
BST <- c("2017-06-01 00:00:01", "2017-06-01 00:00:02",
"2017-06-02 00:00:01", "2017-06-02 00:00:02",
"2017-06-03 00:00:01", "2017-06-03 00:00:02",
"2017-06-01 00:00:01", "2017-06-01 00:00:02",
"2017-06-05 00:00:01", "2017-06-05 00:00:02",
"2017-06-09 00:00:01", "2017-06-09 00:00:02")
dt1 <- data.table(myID, BST)
# Create gapFlag
dt1 <- dt1[, gapFlag := lapply(.SD, function(x) which(as.duration(diff(dt1$BTS))/ddays(1) > 2)), by = myID]
但这似乎是永无止境的.我的实际data.table有1000多万行。
我想要的结果如下所示(额外的好处是计算gapCount中的空白点):
发布于 2018-06-08 03:30:07
这是一种滞后的方法
dt1[, l_BST := shift(BST), by = myID]
然后,您可以根据您对“间隔”的定义来比较这两列(例如,两者之间>2天,两者都没有NA值)。
如果你想使用diff()
并停留在data.table中(即没有其他包),你也可以这样做:
dt1[, gapFlag := c(0, diff(as.Date(BST))) > 2, by = myID]
dt1[, GapCount := cumsum(gapFlag), by = myID]
https://stackoverflow.com/questions/50748758
复制相似问题