使用dplyr在R中过滤日期

时间:2017-04-23 14:19:23

标签: r filter dplyr

我有一个大型数据集(> 3k行),我想根据地理位置和日期进行过滤。位置筛选工作正常但在使用filterdplyr)的日期使用逻辑运算符时收到以下错误消息:

Error: level sets of factors are different

我目前的代码如下:

head(master.data)
   State.Name County.Code Latitude Longitude Arithmetic.Mean Date.Local
1     Alabama           3 30.49748 -87.88026             8.0 2014-01-02
2     Alabama           3 30.49748 -87.88026             7.0 2014-01-05
3     Alabama           3 30.49748 -87.88026             7.0 2014-01-08
4     Alabama           3 30.49748 -87.88026             3.6 2014-01-11
5     Alabama           3 30.49748 -87.88026             5.2 2014-01-14
6     Alabama           3 30.49748 -87.88026             4.4 2014-01-17  

master.data$Date.Local <- as.Date(master.data$Date.Local, format = "%Y-%m-%d")

site.info <- data.frame("Alabama", 3, 30, 90, "28/12/2015", "13/07/2016")
names(site.info) <- c("State.Name", "County.Code", "Latitude", "Longitude", 
                       "Date.Start", "Date.End")
site.info$Date.Start <- as.Date(site.info$Date.Start, format = "%d/%m/%Y")
site.info$Date.End <- as.Date(site.info$Date.End, format = "%d/%m/%Y")

reduced.data <- filter(master.data, State.Name == site.info$State.Name, 
                       Date.Local >= site.info$Date.Start 
                       & Date.Local <= site.info$Date.End)

site.infomaster.data都使用as.Date格式化日期。输入格式不同,因为它们是从外部源导入的。

我能够在filter之外的预期结果上对两者执行逻辑运算。不知道为什么会这样。使用%in%会产生相同的结果

Date.Local %in% c(site.info$Date.Start, site.info$Date.End)

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

经过多次尝试后,在这种情况下subset似乎比filter更有效:

 reduced.data <- subset(master.data, Latitude %in% closest.sites$Latitude
                        & Longitude %in% closest.sites$Longitude
                        & Date.Local >= site.info$Date.Start 
                        & Date.Local <= site.info$Date.End)

上面的代码给出了我想要的结果。

现在我被困在尝试使用相同的时间戳过滤所有条目 - 我想过滤在同一天拍摄的所有样本并找到平均值。在这种情况下,subsetfilter似乎都失败了。 R很难过。