【问题标题】:Create time intervals using a column in R使用 R 中的列创建时间间隔
【发布时间】:2015-06-16 10:52:06
【问题描述】:

我有一列由日期组成的数据框,比方说这种形式

    d$x<-c("2014-05-01 11:36:12", "2014-05-01 11:36:14", "2014-05-01 11:36:15",
           "2014-05-01 11:36:16", "2014-05-01 11:36:16", "2014-05-01 11:36:17")

并想用

建立间隔
  • 分钟:元素 - 60 秒和
  • 最大:元素 + 60 秒

对于每一行。 然后我要查找是否是另一列的元素,假设是

    d$y<-c("2014-05-01 11:38:21", "2014-05-01 11:42:26", "2014-05-01 11:47:37",
           "2014-05-01 11:53:44" ,"2014-05-01 11:59:23", "2014-05-01 12:04:39")

是否属于这些区间中的任何一个。

我使用了for 循环和if,但是我的数据很长,所以这对我来说似乎不是一个好的选择。 length(d$x) 大约是 36000 和 length(d$y) = 100。这是我当前的代码:

$k<-rep(0,length(d$x))
for (i in 1:(length(d$y))) {
  for (j in 1:(d$x)) {
    if ((d$y[i] <= d$x[j]+60) & (d$y[i] >=d$x[j]-60))
      k[i]=i
  }
}

【问题讨论】:

    标签: r time dataframe intervals elements


    【解决方案1】:

    使用sqldf 包:

    #data
    datx <- data.frame(x=as.POSIXct(c("2014-05-01 11:36:12",
                                      "2014-05-01 11:36:14",
                                      "2014-05-01 11:36:15",
                                      "2014-05-01 11:36:16",
                                      "2014-05-01 11:36:16",
                                      "2014-05-01 11:36:17")))
    daty <- data.frame(y=as.POSIXct(c("2014-05-01 11:38:21",
                                      "2014-05-01 11:42:26",
                                      "2014-05-01 11:38:33",
                                      "2014-05-01 11:53:44",
                                      "2014-05-01 11:59:23",
                                      "2014-05-01 12:04:39")))
    
    myInterval <- 180 #3*60sec = 3 minutes
    
    require(sqldf)
    #get y within x +/-interval
    res <-
      fn$sqldf("SELECT distinct(b.y)
             FROM datx a, daty b
             WHERE b.y BETWEEN a.x-$myInterval 
             AND a.x+$myInterval")
    #output
    res
    #                   y
    # 1 2014-05-01 11:38:21
    # 2 2014-05-01 11:38:33
    #get index
    which(daty$y %in% res$y)
    # [1] 1 3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      • 2014-02-08
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多