基于两个日期对数据帧进行子集化

时间:2016-06-15 15:19:39

标签: r date dataframe time-series subset

我有一个数据框1008X5(您可以编写任何假设数据帧。)我想检查两个日期之间数据集的季节性。例如夏季(2010年6月1日至2010年8月31日)等等向前。我试过了:

summer<-selectByDate(stnx, start = "01/06/2010", end = "31/08/2010")

我收到以下错误消息:

  

错误:找不到函数“selectByDate”

为什么这个功能不起作用? 我也试过这个:

myfunc <- function(x,y){stnx[stnx$Date >= x & stnx$Date <= y,]}
x <- as.Date("01/06/2010")
y<- as.Date("31/08/2010")    
Test <- myfunc(x,y)

我收到警告信息:

  
    

警告讯息:1:在[.data.frame中(stnx,stnx $ Date&gt; = x&amp;     stnx $ Date&lt; = y,):不兼容的方法(“Ops.factor”,“Ops.Date”)     对于“&gt; =”2:在[.data.frame中(stnx,stnx $ Date&gt; = x&amp; stnx $ Date&lt; = y,)     :“&lt; =”的不兼容方法(“Ops.factor”,“Ops.Date”)

  

我在这个阶段陷入困境,因为我尝试了许多似乎不起作用的方法。非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

一个可能的答案是使用sqldf在R中使用sql。

test <- slqdf("select * from foobar where date_column >= convert(datetime,'01/06/2010') and date_column <= convert(datetime, '31/08/2010')")

让我知道它是否有效

答案 1 :(得分:0)

您是否下载并加载了包含openair函数的selectByDate包?

install.packages("openair")
require(openair)

此外,selectByDate的文档指出输入(您的sntx data.frame)应包含格式为Date的列:

  

selectByDate(mydata, start = "1/1/2008", end = "31/12/2008", year = 2008, month = 1, day = "weekday", hour = 1)

     

<强> MYDATA :   包含每小时或高分辨率格式的日期字段的数据框。

您可以使用as.Date功能执行此操作。