R中按日期范围设置的子集data.table

Posted

技术标签:

【中文标题】R中按日期范围设置的子集data.table【英文标题】:Subsetting data.table set by date range in R 【发布时间】:2014-04-20 15:48:12 【问题描述】:

我在 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 列中选择日期范围,而无需使用yrmoda 列。目前,我正在使用mo 进行子集化,有时它非常笨拙,尤其是在年份切换时。一种更优雅的方法可以让我的生活变得无比轻松。

提前致谢!

【问题讨论】:

【参考方案1】:

为什么不:

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

【讨论】:

【参考方案2】:

另见:

?`%between%`

像这样工作:

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

【讨论】:

好点 @scottyaz - 向其他人澄清 %between% 是 data.table 包的一部分。看到 ? 加载包时之间。所以如果你走DT路线,那也不算太大的罪过。【参考方案3】:

你提到你是子集,但不清楚你是否在 R 中使用子集 fn。

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

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

【讨论】:

嗨,我收到以下错误:在 Ops.factor(date, "2015-01-01") 中:'>' 对因素没有意义

以上是关于R中按日期范围设置的子集data.table的主要内容,如果未能解决你的问题,请参考以下文章

R 模式匹配与正则表达式的子集 data.table

R通过字符变量的值对data.table进行子集

R:使用具有数字位置的重复列名来子集data.table

如何使用开始日期在 R 中创建滞后的结束日期?

如何使用 data.table 在日期范围内执行连接?

R语言data.table导入数据实战:data.table设置键值(key)复合键设置删除键设置键值之后的数据连接(join)更加方便设置了键值之后可以使用keyby语法代替by语法