我有一个大型数据集(> 3k行),我想根据地理位置和日期进行过滤。位置筛选工作正常但在使用filter
(dplyr
)的日期使用逻辑运算符时收到以下错误消息:
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.info
和master.data
都使用as.Date
格式化日期。输入格式不同,因为它们是从外部源导入的。
我能够在filter
之外的预期结果上对两者执行逻辑运算。不知道为什么会这样。使用%in%
会产生相同的结果
Date.Local %in% c(site.info$Date.Start, site.info$Date.End)
我怎样才能让它发挥作用?
答案 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)
上面的代码给出了我想要的结果。
现在我被困在尝试使用相同的时间戳过滤所有条目 - 我想过滤在同一天拍摄的所有样本并找到平均值。在这种情况下,subset
和filter
似乎都失败了。 R很难过。