2017-04-23 9 views
0

地理的な場所と日付に基づいてフィルタリングする大規模なデータセット(> 3k行)があります。場所フィルタリングは正常に動作しますが、日付の上に論理演算子を使用したとき、私は(dplyrfilterと、次のエラーメッセージが表示されます。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を使用してフォーマットされた日付。外部ソースからインポートされるため、入力形式が異なります。

2つの論理演算を、期待される結果をfilterの外で実行できます。なぜこれが当てはまるのか分かりません。 %in%を使用すると、

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

どのように私はこの作業を取得することができ、同じ結果が得られますか?

+0

'site.info'に要素の数が増え、 'factor'クラスであれば、' State.Name == site.info $ State.Name'が問題になるかもしれません。 'join'を試してみてください。これは '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))'をあなたに含めると、私たちは確実に知ることができます。この列を要因としない限り、それを1つにすることはできません。 EGは 'readAstable'で' 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は悲惨です。

関連する問題