使用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应返回数据)

答案

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

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

timeframe  <- as.character(timeframe, "%Y-%m-%d")
另一答案

你正在混淆对象类型。在你的例子中,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
另一答案

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

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

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

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

然后就像过滤一样过滤。

以上是关于使用R中的日期向量过滤data.table [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

R语言data.table导入数据实战:data.table使用字符向量创建新的数据列

如何根据r中的条件(日期)更新data.table中的值

R data.table:如何使用字符串中的名称创建新列?

使用 data.table 时如何从字符向量创建列名

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

在data.table R中滚动连接