2017-04-23 190 views
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.infomaster.data有日期格式爲as.Date。輸入格式不同,因爲它們是從外部來源導入的。

我能夠對filter以外的預期結果執行邏輯操作。不知道爲什麼會這樣。使用%in%得到相同的結果

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

我該如何得到這個工作?

+0

我覺得你的'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

+0

我也會試試這個。 'site.info'不超過12行,日期格式使用'as.Date',所以我很好奇它爲什麼不起作用。 – Gautam

+1

您的State.Name列可能是一個因素 - 在每個data.frame中具有不同的級別。如果在你的問題中包含'dput(head(master.data))',我們可以肯定地知道。除非你想把這個專欄作爲一個因素,否則不要讓它成爲一個專欄。 EG在'read.table'中使用'stringsAsFactors = FALSE' –

回答

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是禍患。