使用 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() 中有一个%&gt;% 【参考方案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 过滤日期而不更改变量格式的主要内容,如果未能解决你的问题,请参考以下文章

在 dplyr 中过滤日期

如何根据过滤条件添加计数列而不是在dplyr中进行分组?

如何更改 ag-grid 日期过滤器占位符格式

如何更改物料表反应中的过滤日期格式?

在R中,如何使用dplyr按数据类型过滤数据帧?

KendoUI 网格过滤器日期格式