【问题标题】:R Double conditions LoopR 双条件循环
【发布时间】:2015-03-10 19:00:45
【问题描述】:

我有 2 个交易时间数据集。我正在寻找一种方法来检查是否在我的数据集 1 中的某个时间发生的交易,我可以在我的数据集 2 中找到同时发生的交易,并在我的数据集 2 中返回该交易的位置。此外,如果我的数据集2中不存在相应的交易,我想检查在 1 分钟、2 分钟或 3 分钟的时间窗口内是否存在一个,...(直到找到最多 15 分钟)。

dataset1 <- as.POSIXct(c("26/09/1999 09:00", "26/09/1999 09:40", "27/09/2000 10:53"), format="%d/%m/%Y %H:%M")

dataset2 <- as.POSIXct(c("14/08/1999 09:00", "26/09/1999 09:40", "27/09/1999 10:53", "27/09/2000 10:53"), format="%d/%m/%Y %H:%M")

它应该返回一个新的向量匹配:c(NA, 2, 4)

我试过了:

VectorMatch <- rep(NA, length(les))
for (i in length(les)){
  j<-0
  while((is.na(VectorMatch[i])) & (j <15)){
    VectorMatch[i] <- match((les[i]+j*60),(les2))
    j <- j+1
  }
}

但它似乎不起作用。它给了我 NA NA 4 而不是 NA 2 4

非常感谢您的帮助

干杯

【问题讨论】:

    标签: r loops double conditional-statements


    【解决方案1】:

    我的第一个答案完全忽略了 15 分钟窗口部分,只解决了完全匹配问题。以下“长”代码提供了完整的解决方案

    library(data.table)
    dt1 <- data.table(x=dataset1, i=c(1, 2, 3))
    dt2 <- data.table(x=dataset2, i=c(1, 2, 3, 4))
    setkey(dt1, x)
    setkey(dt2, x)
    d <- dt1[dt2, roll="nearest"]
    d[ , x1:=dt1[d[,i], x], ][ , .(i.i[which.min(x-x1)] , min(difftime(x, x1, units ="mins"))), i][, ifelse(abs(V2) < 15, V1, NA),]
    [1] NA  2  4
    

    第一个答案

    这会给你想要的结果

    match(dataset1, dataset2)
    [1] NA  2  4
    

    【讨论】:

      猜你喜欢
      • 2016-03-19
      • 2017-12-09
      • 2012-06-21
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 2020-10-01
      • 2019-05-05
      相关资源
      最近更新 更多