地理的な場所と日付に基づいてフィルタリングする大規模なデータセット(> 3k行)があります。場所フィルタリングは正常に動作しますが、日付の上に論理演算子を使用したとき、私は(dplyr
)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
を使用してフォーマットされた日付。外部ソースからインポートされるため、入力形式が異なります。
2つの論理演算を、期待される結果をfilter
の外で実行できます。なぜこれが当てはまるのか分かりません。 %in%
を使用すると、
Date.Local %in% c(site.info$Date.Start, site.info$Date.End)
どのように私はこの作業を取得することができ、同じ結果が得られますか?
'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
私もこれを試してみます。 'site.info'は12行を超えず、日付は' as.Date'を使ってフォーマットされていますので、なぜ動作しないのか不思議です。 – Gautam
あなたのState.Name列はおそらく、各data.frameのレベルが異なる要素です。 'dput(head(master.data))'をあなたに含めると、私たちは確実に知ることができます。この列を要因としない限り、それを1つにすることはできません。 EGは 'readAstable'で' stringsAsFactors = FALSE'を使用します。 –