为什么dplyr :: filter()包含条件为False的数据?

时间:2017-03-06 15:19:27

标签: r filter dplyr

这是我难以理解的事情。想象一下,我有一个包含2列的数据框:

**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**列中的年份不匹配的所有条目。

所以,我为 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。假设我不关心NA列中的**Date**值,并且每当NA出现时我都会离开此行。

1 个答案:

答案 0 :(得分:1)

这可能与您的

有关
dateParser(data$Date)

不会以数据格式返回您正在寻找的内容。

尝试:

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