【问题标题】:Filter with timestamp not filtering data R [duplicate]带有时间戳的过滤器不过滤数据R [重复]
【发布时间】:2023-04-09 17:28:02
【问题描述】:

我有一个大型数据集(67000 obs,6 个变量),我正在尝试使用关联的时间戳进行过滤。我正在使用 dplyr::filter 函数,虽然从数据集中删除了一些行,但它的行为并不像我预期的那样。见下文:

示例数据

timestamp     Var2      Var3
12.58.00      0.0       1.2
12.58.10      0.1       1.5
12.58.20      0.2       1.3
...
2.49.50       6719.79   1.37
2.49.60       6719.89   1.20
2.49.70       6719.99   1.14

带有filter 调用的脚本:

data <- read_excel("file.xlsx", col_names = TRUE)
data$timestamp <- sapply(strsplit(data$timestamp, split = " ", fixed = TRUE), function(x) (x[2]))
data$timestamp <- str_replace_all(data$timestamp, ":", ".")
  
data <- filter(data, data$timestamp > "1.29.00" & data$timestamp < "2.51.00")

预期结果:

timestamp     Var2       Var3
1.29.00       1870.9     1.3
1.29.10       1871.0     1.5
1.29.20       1871.1     0.7
...
2.49.50       6719.79   1.37
2.49.60       6719.89   1.20
2.49.70       6719.99   1.14

我得到的不是预期的结果,而是包含带有时间戳的行的数据框:

12.58.00-12.59.59

那么下一行是:

1.29.11

我对@9​​87654326@ 的调用没有按我认为的那样工作?非常感谢。

【问题讨论】:

    标签: r


    【解决方案1】:

    您正在比较字符串。要比较时间,请将timestamp 转换为POSIXct 或类似名称。

    df$t1 <- as.POSIXct(df$timestamp, format = '%H.%M.%S')
    start <- as.POSIXct("1.29.00", format = '%H.%M.%S')
    end <- as.POSIXct("2.51.00", format = '%H.%M.%S')
    
    subset(df, t1 > start & t1 < end)
    

    或者使用dplyr

    library(dplyr)
    df %>% filter(between(t1, start, end))
    

    【讨论】:

    • 太好了,我没想到数据类,多谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 2016-05-18
    • 2021-07-09
    • 1970-01-01
    • 2018-09-11
    • 2021-10-14
    • 1970-01-01
    相关资源
    最近更新 更多