在R中选择特定日期

时间:2013-09-10 17:08:54

标签: r date subset

我想知道如何根据日期列表而不是日期范围在R中创建数据子集。

例如,我有以下数据集data,其中包含3年的6分钟数据。

      date            zone month day year hour minute temp speed gust dir 
1  09/06/2009 00:00   PDT     9   6 2009    0      0   62    2   15 156 
2  09/06/2009 00:06   PDT     9   6 2009    0      6   62   13   16 157 

我已经使用breeze<-subset(data, ws>=15 & wd>=247.5 & wd<=315, select=date:dir)来选择符合我的海风标准的行,这很好,但我想要做的是创建包含符合我的标准的那些时间的日子集。

我用过......

as.character(breeze$date)
trimdate<-strtrim(breeze$date, 10)
breezedate<-as.Date(trimdate, "%m/%d/%Y")
breezedate<-format(breezedate, format="%m/%d/%Y")

...从符合我标准的每一行中提取日期,所以我有一个名为breezedate的变量,其中包含我想要的日期列表(不是最有说服力的编码,我'当然)。列表中有大约两百个日期。我正在尝试使用下一个命令在我的原始数据集data中创建一个子集,该子集仅包含符合seabreeze标准的那些天,而不仅仅是特定时间。

breezedays<-(data$date==breezedate)

我认为我的一个问题是我将一个值与值列表进行比较,但我不确定如何使其工作。

2 个答案:

答案 0 :(得分:2)

让我们假设您的breezedate列表如下所示,data $ date是简单的字符串:

  breezedate <- as.Date(c("2009-09-06", "2009-10-01"))

这可能是你想要的:

  breezedays <- data[as.Date(data$date, '%m/%d/%Y') %in% breezedate]

答案 1 :(得分:0)

intersect()函数(docs)允许您将一个数据框与另一个数据框进行比较,并返回相同的记录。

要使用,请运行以下命令:

breezedays <- intersect(data$date,breezedate) # returns into breezedays all records that are shared between data$date and breezedate