我想知道如何根据日期列表而不是日期范围在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)
我认为我的一个问题是我将一个值与值列表进行比较,但我不确定如何使其工作。
答案 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