使用R中的日期向量过滤data.table [关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用R中的日期向量过滤data.table [关闭]相关的知识,希望对你有一定的参考价值。
如何创建数据向量来过滤data.table?
timeframe = as.Date(seq(ISOdate(1997,06,12), Sys.time(), "weeks"))
timeframe2 = c("1997-06-12", "1997-06-19")
tmp = data[Name == "aaa" & Date %in% timeframe] #doesn't return data
tmp = data[Name == "aaa" & Date %in% timeframe2] #returns data
tmp只返回第二个timeframe2变量的数据(我只显示timeframe2作为示例,表明tmp应返回数据)
答案
我认为数据框data
有Date
类型的character
列。这就是为什么过滤器在timeframe2
上工作,但timeframe
是Date
类型,过滤器不起作用。
一个修复可能是在Date
中将Date
列的类型更改为data
或其他选项可以将timeframe
转换为character
。例如:
timeframe <- as.character(timeframe, "%Y-%m-%d")
另一答案
你正在混淆对象类型。在你的例子中,timeframe
是Date
矢量,而timeframe2
是character
矢量。
“过滤”向量的工作方式会有所不同,具体取决于data
中的列类型。
这是一个展示的例子。
library(data.table)
dts <- c("2018-03-05", "2018-03-06")
## creating a data.table with 3 columns, a character, Date and POSIXct
dt <- data.table(
date1 = dts,
date2 = as.Date(dts),
date3 = as.POSIXct(dts, tz = "Australia/Melbourne")
)
## create a character vector as the filter
timeframe <- c("2018-03-05")
成功 - 用character
矢量过滤character
列
dt[date1 %in% timeframe]
# date1 date2 date3
# 1: 2018-03-05 2018-03-05 2018-03-05
失败 - 用Date
向量过滤character
列
dt[date2 %in% timeframe]
# Empty data.table (0 rows) of 3 cols: date1,date2,date3
成功 - 用Date
矢量过滤Date
列
dt[date2 %in% as.Date(timeframe)]
# date1 date2 date3
# 1: 2018-03-05 2018-03-05 2018-03-05
失败 - 用POSIXct
向量过滤character
列
dt[date3 %in% timeframe]
# Empty data.table (0 rows) of 3 cols: date1,date2,date3
成功 - 用POSIXct
矢量过滤POSIXct
列
dt[date3 %in% as.POSIXct(timeframe)]
# date1 date2 date3
# 1: 2018-03-05 2018-03-05 2018-03-05
另一答案
很难按照你的例子,但我认为你给出了两个你想要过滤的日期向量的例子?
如果你想要同时进行过滤,那么你需要确保不要用#2覆盖#1。在第二行中,您可能希望改为使用
timeframe = c(timeframe,"1997-06-12", "1997-06-19")
这将创建一个包含所需日期的向量(它只是将您想要的两个向量粘在一起)。
然后就像过滤一样过滤。
以上是关于使用R中的日期向量过滤data.table [关闭]的主要内容,如果未能解决你的问题,请参考以下文章