1
ここは私が理解するのに苦労しているものです。なぜdplyr :: filter()に条件がFalseのデータが含まれていますか?
**Year** **Date**
1925 1925-01-02
1941 1925-02-03
1990 1990-01-02
1956 NA
1990 1990-01-02
2002 2004-01-02
そして、私は**Year**
列の値が**Date**
列の年と一致していないこれらのエントリのすべてをフィルタリングしようとしています:私は2列を持つデータフレームを持っている想像してみてください。
dateParser <- function(date) {
dateStr <- toString(date)
yearStr <- strsplit(dateStr, "-")[[1]][1]
yearInt <- as.integer(yearStr)
return(yearInt)
}
、その後、私はそれらの出現をフィルタリングするdplyr::filter()
を使用しています:
noMismatch <- dplyr::filter(data, as.integer(data$Year) == dateParser(data$Date))
だから、私は非常に大きなデータセットを想定し
日列のために、小さなパーサを書かれている
しかし、私は年が一致しない結果のデータフレームにいくつかの行が表示されています。どうして?
P.S.のは、私が**Date**
コラムでは約NA
値を気にしないとNA
が発生するたびに、私はちょうどこの行を残していますと仮定しよう。
エラーは、現在のデータのサンプルで発生していますか?年はどのクラスですか?私は 'lubridate :: year()'を使用します。 –
'strsplit(dateStr、" - ")[[1]] [1]'を見てください。これは最初の行からの単一要素です。すべての行をカバーするベクトルの代わりにそれを使用すると、奇妙な結果が得られるのは当然です。 – Frank
@Frank、私はあなたがポイントを持っているように感じる、ベクトル化されたソリューションがどのように見えるかを詳しく教えていただけますか?私はまだRのベクトル化された性質に合わせて問題を抱えていると思う。 –