我有一个下面的数据帧,我想过滤只包含2019-06-01到2019-06-30 值的数据帧
ds yhat
1 2015-01-01 -100
2 2015-01-02 250
3 2015-01-03 50
4 … 60
5 2019-06-30 370
三种方法,取决于您选择的R-生态系统:
### base R
subset(dat, as.Date("2019-06-01") <= ds & ds <= as.Date("2019-06-30"))
# ds yhat
# 5 2019-06-30 370
### tidyverse
library(dplyr)
dplyr::filter(dat, between(ds, as.Date("2019-06-01"), as.Date("2019-06-30")))
# ds yhat
# 5 2019-06-30 370
### data.table
library(data.table)
as.data.table(dat)[ between(ds, as.Date("2019-06-01"), as.Date("2019-06-30")), ]
# ds yhat
# 1: 2019-06-30 370
(仅供参考:我将dplyr::
预先设置为filter
的唯一原因是,有些人可能会在不加载dplyr
的情况下尝试调用,但会发现stats::filter
的行为大不相同。一般来说,如果是library(dplyr)
,则应该只能执行filter(dat, ...)
。(
数据:
(ds
已转换为Date
类。(
dat <- structure(list(ds = structure(c(16436, 16437, 16438, NA, 18077), class = "Date"), yhat = c(-100L, 250L, 50L, 60L, 370L)), row.names = c("1", "2", "3", "4", "5"), class = "data.frame")