使用dplyr过滤日期而不更改变量格式

Bac*_*gie 2 r filter mutated dplyr

我希望使用年份列表按日期过滤数据库

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)
Run Code Online (Sandbox Code Playgroud)

上面的代码工作,让我过滤我的数据集,但它也格式化日期列.有没有办法获得我的过滤结果,而没有在完成的子集数据框中更改日期列的格式?

Kar*_*Woo 7

如果您准备使用该lubridate软件包,您可以:

library("lubridate")

yearsdata %>%
  filter(is.null(years) | year(mydate) %in% years)
Run Code Online (Sandbox Code Playgroud)

这使:

#   animal     mydate
# 1    pig 2014-01-01
Run Code Online (Sandbox Code Playgroud)


Dav*_*urg 5

所有这些管道让我很头疼,我会这样做

library(data.table)
setDT(yearsdata)[is.null(years) | year(mydate) %in% years]
#    animal     mydate
# 1:    pig 2014-01-01
Run Code Online (Sandbox Code Playgroud)