2017-03-06 90 views
1

這裏是我努力去理解的東西。想象一下,我有一個有2列的數據幀:爲什麼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**列匹配一年的條目。

所以,我寫了一個小的解析器,爲日期列假設一個更大的數據集:

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發生,我就要離開這個排。

+1

會發生錯誤數據的你目前的樣本?什麼班是年?我會使用'lubridate :: year()'。 –

+1

看看'strsplit(dateStr,「 - 」)[[1]] [1]' - 這只是第一行中的一個元素。使用它而不是覆蓋所有行的向量,很自然會得到奇怪的結果。 – Frank

+0

@Frank,我覺得您可能有一點,請您詳細說明矢量化解決方案的外觀如何?我想我仍然有麻煩調整到R的矢量化性質。 –

回答

1

這可能是與事實做你

dateParser(data$Date) 

沒有按」根據數據格式返回您要查找的內容。

嘗試:

library(lubridate) 
library(dplyr) 
noMismatch <- filter(data, as.integer(data$Year) == year(data$Date)) 
相關問題