按 R 中未指定年份的日期条件过滤
Filter by a date condition with an unspecified year in R
我有一个包含“日期”列的数据框。格式为:“Y%-m%-d%”
> class(df$date)
[1] "character"
> head(df$date)
[1] "1989-03-01" "2002-03-24" "2021-04-02" "2004-02-01" "2020-03-26" "1996-04-06"
我想对我的数据框进行子集化,取出 [01-01;01-05](包括 1 月 1 日至 5 日)之间的所有日期无论年份,这就是给我带来麻烦的原因。
我该怎么做?非常感谢。
编辑:看来我可能表达不好。我想从数据集中删除 1 月 1 日至 5 日期间的数据。因此,为了保留每年剩下的时间,每年都会发生什么。
这是一个选项,我们采用 substring
排除年份部分,并使用 %in%
创建一个包含 01-01
到 01-05
的逻辑向量
subset(df, !substring(date, 6) %in% sprintf("01-%02d", 1:5))
或者可以转换为 Date
class 并提取 month
、day
以创建逻辑
library(dplyr)
library(lubridate)
df %>%
mutate(date = ymd(date)) %>%
filter(month(date) == 1, day(date) > 5)
这是一个替代方法,转换为字符。
df[format(as.Date(df$date), "%m%d") > "0105",]
我有一个包含“日期”列的数据框。格式为:“Y%-m%-d%”
> class(df$date)
[1] "character"
> head(df$date)
[1] "1989-03-01" "2002-03-24" "2021-04-02" "2004-02-01" "2020-03-26" "1996-04-06"
我想对我的数据框进行子集化,取出 [01-01;01-05](包括 1 月 1 日至 5 日)之间的所有日期无论年份,这就是给我带来麻烦的原因。
我该怎么做?非常感谢。
编辑:看来我可能表达不好。我想从数据集中删除 1 月 1 日至 5 日期间的数据。因此,为了保留每年剩下的时间,每年都会发生什么。
这是一个选项,我们采用 substring
排除年份部分,并使用 %in%
01-01
到 01-05
的逻辑向量
subset(df, !substring(date, 6) %in% sprintf("01-%02d", 1:5))
或者可以转换为 Date
class 并提取 month
、day
以创建逻辑
library(dplyr)
library(lubridate)
df %>%
mutate(date = ymd(date)) %>%
filter(month(date) == 1, day(date) > 5)
这是一个替代方法,转换为字符。
df[format(as.Date(df$date), "%m%d") > "0105",]