首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何标记时间数据中的间隙

如何标记时间数据中的间隙
EN

Stack Overflow用户
提问于 2018-06-08 03:20:28
回答 1查看 77关注 0票数 2

我正在尝试创建一个标记,用于识别超过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中的空白点):

EN

回答 1

Stack Overflow用户

发布于 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]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50748758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档