代码之家  ›  专栏  ›  技术社区  ›  Joe

使用timeDiff()计算时间之间的差异,并选择超过一小时的时间

r
  •  0
  • Joe  · 技术社区  · 2 年前

    我有一个我试图比较的时间数据集,我使用timeDiff()来计算数据中列的时间差异。我现在想选择任何比我原来的时间早一个多小时的时间。当时间在正刻度上超过一个小时时,这很好,但当任何时间在负刻度上显示时,我都很难得到它们。

    dset
    localtime             Tb_localtime           timeDiff
    2024-08-17 11:00:00   2024-08-17 12:10:00    70
    2024-08-17 13:00:00   2024-08-17 13:12:00    12
    2024-08-17 11:00:00   2024-08-17 11:08:00    8
    2024-08-17 13:00:00   2024-08-17 12:56:00    -4
    2024-08-17 14:00:00   2024-08-17 12:58:00    -62
    2024-08-17 14:30:00   NA                     NA
    

    我试过了

    which(dset$timeDiff > 60) #returns integer(0) 
    

    我非常确定这是由于数据中的NA造成的,但我也确定这不是处理负值的正确方法。

    2 回复  |  直到 2 年前
        1
  •  1
  •   Friede    2 年前

    无需外部包装。简单使用 abs() 在里面 subset() :

    > subset(dset, abs(timeDiff) > 60L)
                localtime        Tb_localtime timeDiff
    1 2024-08-17 11:00:00 2024-08-17 12:10:00       70
    5 2024-08-17 14:00:00 2024-08-17 12:58:00      -62
    ## equivalent 
    # dset[abs(dset$timeDiff) > 60L, ]
    
        2
  •  1
  •   reinoud    2 年前

    要过滤时差超过60分钟(正或负)的行,可以使用 abs() 功能与 is.na() 处理任何缺失的值:

    dset[!is.na(dset$timeDiff) & abs(dset$timeDiff) > 60, ]