【问题标题】:Filtering data by datetime variable R按日期时间变量 R 过滤数据
【发布时间】:2022-01-30 23:14:01
【问题描述】:

假设我有以下数据框,我在其上创建了一个 DateTime 列:

df <- read.table(text="
Date         Time   pH
1976-01-26   0:00   4.00
1976-01-26   0:15   4.05
1976-01-26   1:00   4.50
1976-01-26   1:15   4.50
1976-01-27   0:00   4.00
1976-01-27   0:15   4.50
1076-01-27   2:00   4.00", header=T)

df$DateTime <- as.POSIXct(paste(df$Date, df$Time))

因此,我的数据如下:

        Date Time   pH            DateTime
1 1976-01-26 0:00 4.00 1976-01-26 00:00:00
2 1976-01-26 0:15 4.05 1976-01-26 00:15:00
3 1976-01-26 1:00 4.50 1976-01-26 01:00:00
4 1976-01-26 1:15 4.50 1976-01-26 01:15:00
5 1976-01-27 0:00 4.00 1976-01-27 00:00:00
6 1976-01-27 0:15 4.20 1976-01-27 00:15:00
7 1076-01-27 2:00 3.80 1076-01-27 02:00:00

如何根据DateTime 列仅过滤分钟为00:00 的行? 例如00:00:00, 01:00:00, 02:00:00 必须在输出中

【问题讨论】:

    标签: r datetime filter time


    【解决方案1】:

    如果你想filter 时间是'00:00:00',你可以使用as_hms 来考虑只过滤一天中的时间:

    library(dplyr)
    library(hms)
    
    filter(df, as_hms(DateTime) == as_hms('00:00:00'))
    

    filter偶数小时(分钟数为零),您可以使用minute from lubridate

    library(lubridate)
    
    filter(df, minute(DateTime) == 0)
    

    同样,如果你想在零分和零秒上filter,你可以这样做:

    filter(df, minute(DateTime) == 0 & second(DateTime) == 0)
    

    【讨论】:

    • 对不起,我的问题是错误的,我编辑它是为了让它正是我需要获得的
    • @AntonioMastroianni 查看已编辑的答案。这是你要找的吗?
    • 会不会是hms包和readr包一起使用会减慢数据的读取速度?
    • @AntonioMastroianni 不确定我是否关注 - readr 包已经使用 hmscran.r-project.org/web/packages/readr/index.html
    • 确保您有足够的可用 RAM。如前所述,考虑使用fread。考虑分块阅读。此外,还有其他关于读取大型 csv 文件的 SO 答案。或者随时就此发表另一个问题。我希望这可能会有所帮助。
    【解决方案2】:

    由于您正在处理日期,我相信 Ben 的解决方案更适合您。我的方法是进行一般字符串匹配。

    这里我们使用grepl() 来查找模式并返回filter() 的逻辑值。

    更新:既然你更新了你的问题,我也更新了我的代码。

    df %>% as_tibble() %>% filter(grepl("0.:00:00", DateTime))
    

    输出

    # A tibble: 4 x 4
      Date       Time     pH DateTime           
      <chr>      <chr> <dbl> <dttm>             
    1 1976-01-26 0:00    4   1976-01-26 00:00:00
    2 1976-01-26 1:00    4.5 1976-01-26 01:00:00
    3 1976-01-27 0:00    4   1976-01-27 00:00:00
    4 1076-01-27 2:00    4   1076-01-27 02:00:00
    

    【讨论】:

    • 对不起,我的问题是错误的,我编辑它是为了让它正是我需要获得的
    • 相应更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 2014-02-28
    • 2021-09-01
    相关资源
    最近更新 更多