在R中按日期范围对data.table进行子集筛选

34

我有一个使用data.table存储的大型数据集,我希望按日期范围对其进行子集筛选。我的数据集如下:

testset <- data.table(date=as.Date(c("2013-07-02","2013-08-03","2013-09-04",
                                     "2013-10-05","2013-11-06")), 
                      yr = c(2013,2013,2013,2013,2013), 
                      mo = c(07,08,09,10,11),
                      da = c(02,03,04,05,06), 
                      plant = LETTERS[1:5], 
                      product = as.factor(letters[26:22]), 
                      rating = runif(25))
我希望能够直接从as.Date 列中选择日期范围,而无需使用 yrmo 或者 da 列。目前,我正在通过 mo 进行子集处理,有时非常笨拙,特别是当年份转换时。更优雅的方法会让我的生活变得轻松愉快。谢谢!
3个回答

41

为什么不呢:

testset[date>="2013-08-02" & date<="2013-11-01"]

23

另请参阅:

?`%between%`

工作原理如下:

testset[date %between% c("2013-08-02", "2013-11-01")]

@scottyaz 说得好 - 为了向其他人澄清,%between% 是 data.table 包的一部分。在加载包时查看 ?between。因此,如果您选择 DT 路线,那么这并不是太大的罪过。 - micstr

8

您提到了子集,但不清楚您是否在使用R中的subset函数。

在R控制台中键入?subset以查看R中subset()函数的详细信息,该函数“返回满足条件的向量、矩阵或数据框的子集”。然后使用Troy上面发布的方法的一部分来选择日期范围。

thisYear <- subset(testset, date > "2015-01-01" & date < "2015-12-31")

你好, 我遇到了以下错误: 在Ops.factor(date, "2015-01-01")中:因素无法进行‘>’比较。 - Siddharth Patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接