使用R中的日期向量过滤data.table [关闭]

问题描述 投票:0回答:3

如何创建数据向量来过滤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应返回数据)

r data.table
3个回答
2
投票

我认为数据框dataDate类型的character列。这就是为什么过滤器在timeframe2上工作,但timeframeDate类型,过滤器不起作用。

一个修复可能是在Date中将Date列的类型更改为data或其他选项可以将timeframe转换为character。例如:

timeframe  <- as.character(timeframe, "%Y-%m-%d")

3
投票

你正在混淆对象类型。在你的例子中,timeframeDate矢量,而timeframe2character矢量。

“过滤”向量的工作方式会有所不同,具体取决于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

1
投票

很难按照你的例子,但我认为你给出了两个你想要过滤的日期向量的例子?

如果你想要同时进行过滤,那么你需要确保不要用#2覆盖#1。在第二行中,您可能希望改为使用

timeframe = c(timeframe,"1997-06-12", "1997-06-19")

这将创建一个包含所需日期的向量(它只是将您想要的两个向量粘在一起)。

然后就像过滤一样过滤。

© www.soinside.com 2019 - 2024. All rights reserved.