首页 > 解决方案 > 如何使用 R 按行值范围过滤数据帧?

问题描述

我有一个以下数据框,我想过滤仅包含从 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

标签: rdataframefilterrowsubset

解决方案


三种方法,取决于您选择的 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-class。)

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")

推荐阅读