0

我想知道如何根据日期列表而不是日期范围在 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)

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

4

2 回答 2

2

让我们假设您的清风日期列表如下所示,并且 data$date 是简单的字符串:

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

这可能是你想要的:

  breezedays <- data[as.Date(data$date, '%m/%d/%Y') %in% breezedate]
于 2013-09-10T17:47:52.830 回答
0

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

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

breezedays <- intersect(data$date,breezedate) # returns into breezedays all records that are shared between data$date and breezedate
于 2013-09-10T17:58:59.803 回答