R-基于列数据的计时器(x时间条件为真),用于大型数据集

R-基于列数据的计时器(x时间条件为真),用于大型数据集,r,datetime,conditional,elapsedtime,R,Datetime,Conditional,Elapsedtime,免责声明:我是新手,我已经搜索了答案。也有类似的问题,但我在将我读到的内容转换为对我的实现有意义的内容时遇到了问题 我试图添加一个条件计时器列,它测量sampleCondition=TRUE的时间量。如果条件返回false,则计时器应重置。注意:我试图摆脱for循环。我目前正在以秒为单位计算ConditionTime,但对于示例来说可能是分钟。 最终结果应如下所示: 我仍在学习,到目前为止,每次尝试改进大型数据集,最终都会打破一切。(大约1 mil行)有人能提供一个样本解决方案或给我指出正确的方

免责声明:我是新手,我已经搜索了答案。也有类似的问题,但我在将我读到的内容转换为对我的实现有意义的内容时遇到了问题

我试图添加一个条件计时器列,它测量sampleCondition=TRUE的时间量。如果条件返回false,则计时器应重置。注意:我试图摆脱for循环。我目前正在以秒为单位计算ConditionTime,但对于示例来说可能是分钟。 最终结果应如下所示:

我仍在学习,到目前为止,每次尝试改进大型数据集,最终都会打破一切。(大约1 mil行)有人能提供一个样本解决方案或给我指出正确的方向吗?非常感谢您的帮助。:)

#创建示例日期时间
DateTime试试这个:

x <- sampleDF$sampleCondition

(cumsum(x)-cummax((!x)*cumsum(x)))*60
[1]   0  60   0   0  60 120   0
样本数据:

sampleDF <- data.frame(
  DateTime=c("2017-09-01 09:37:04", "2017-09-01 09:38:04", "2017-09-01 09:39:04", "2017-09-01 09:40:04", "2017-09-01 09:41:04", "2017-09-01 09:42:04", "2017-09-01 09:43:04"),
  sampleCondition=c(0,1,0,0,1,1,0),
)
sampleDF试试这个:

x <- sampleDF$sampleCondition

(cumsum(x)-cummax((!x)*cumsum(x)))*60
[1]   0  60   0   0  60 120   0
样本数据:

sampleDF <- data.frame(
  DateTime=c("2017-09-01 09:37:04", "2017-09-01 09:38:04", "2017-09-01 09:39:04", "2017-09-01 09:40:04", "2017-09-01 09:41:04", "2017-09-01 09:42:04", "2017-09-01 09:43:04"),
  sampleCondition=c(0,1,0,0,1,1,0),
)

sampleDF完美地完成了这项工作,而且非常优雅。我已将其扩展到140k行数据,并在纳秒内进行处理。闪电般的快!!非常感谢您抽出时间来协助,我非常感谢@杰里米亚迈尔斯-不客气。很高兴听到它运行良好。愉快的编码。这项工作做得很完美,而且非常优雅。我已将其扩展到140k行数据,并在纳秒内进行处理。闪电般的快!!非常感谢您抽出时间来协助,我非常感谢@杰里米亚迈尔斯-不客气。很高兴听到它运行良好。快乐编码。