0
我有一个大型数据集(> 3k行),我想根据地理位置和日期进行过滤。位置过滤工作正常,但使用逻辑运算符在日期上与filter
时,我得到了以下错误消息(dplyr
):在R中使用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)
我该如何得到这个工作?
我觉得你的'State.Name == site.info $ State.Name'可能会令人困扰,如果'site.info'中有更多的元素并且是'factor'类。你可以尝试一个'加入'。这可以通过'data.table'更容易完成,也就是'setDT(master.data)[site.info,on =。(State.Name,Date.Local> = Date.Start,Date.Local <= Date.End )]' – akrun
我也会试试这个。 'site.info'不超过12行,日期格式使用'as.Date',所以我很好奇它为什么不起作用。 – Gautam
您的State.Name列可能是一个因素 - 在每个data.frame中具有不同的级别。如果在你的问题中包含'dput(head(master.data))',我们可以肯定地知道。除非你想把这个专栏作为一个因素,否则不要让它成为一个专栏。 EG在'read.table'中使用'stringsAsFactors = FALSE' –