使用 dplyr 过滤日期而不更改变量格式
Posted
技术标签:
【中文标题】使用 dplyr 过滤日期而不更改变量格式【英文标题】:Filtering on a date using dplyr without changing the variable format 【发布时间】:2015-07-23 19:58:06 【问题描述】:我想使用年份列表按日期过滤数据库
years<-c("2014")
yearsdata <- data.frame(animal=c("cow","pig"),
mydate=c(as.Date("2015-01-01"),
as.Date("2014-01-01")))
yearsdata %>%
mutate(mydate =format(mydate, "%Y") %>%
as.character()) %>%
filter(is.null(years) | mydate %in% years)
上面的代码可以工作,让我过滤我的数据集,但它也格式化了日期列。有没有办法在完成的子集数据帧中不改变日期列格式的情况下获得我的过滤结果?
【问题讨论】:
如果您不想格式化日期,请不要用format(mydate)
覆盖mydate
。只需创建一个新列year = format(mydata, "%Y")
,您可以将其放在末尾select(-year)
。 (或使用如下所示的 lubridate。)
你的括号放错了吗?你的mutate()
中有一个%>%
!
【参考方案1】:
如果您准备使用 lubridate
软件包,您可以这样做:
library("lubridate")
yearsdata %>%
filter(is.null(years) | year(mydate) %in% years)
这给出了:
# animal mydate
# 1 pig 2014-01-01
【讨论】:
【参考方案2】:所有这些管道让我头疼,我会这样做
library(data.table)
setDT(yearsdata)[is.null(years) | year(mydate) %in% years]
# animal mydate
# 1: pig 2014-01-01
【讨论】:
以上是关于使用 dplyr 过滤日期而不更改变量格式的主要内容,如果未能解决你的问题,请参考以下文章