按日期时间变量 R 过滤数据

Filtering data by datetime variable R

假设我有以下数据框,我在其上创建了 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 必须在输出中

既然你是处理日期,我相信Ben的解决方案更适合你。我的做法是一般的字符串匹配。

这里我们使用 grepl() 来寻找模式,return 是 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

如果您想 filter 时间为“00:00:00”,您可以使用 as_hms 仅考虑一天中的时间进行过滤:

library(dplyr)
library(hms)

filter(df, as_hms(DateTime) == as_hms('00:00:00'))

filter 偶数小时(分钟数为零),您可以使用 minutelubridate:

library(lubridate)

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

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

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