按日期时间变量 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
偶数小时(分钟数为零),您可以使用 minute
从 lubridate
:
library(lubridate)
filter(df, minute(DateTime) == 0)
同样,如果您想 filter
在零分钟和零秒,您可以这样做:
filter(df, minute(DateTime) == 0 & second(DateTime) == 0)
假设我有以下数据框,我在其上创建了 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
偶数小时(分钟数为零),您可以使用 minute
从 lubridate
:
library(lubridate)
filter(df, minute(DateTime) == 0)
同样,如果您想 filter
在零分钟和零秒,您可以这样做:
filter(df, minute(DateTime) == 0 & second(DateTime) == 0)