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' –