спасибо за ваше время.
Это, вероятно, очевидная проблема, которую я упускаю из виду, но сегодня утром я столкнулся с неожиданным поведением, используя dplyr::filter()
.
Использование filter()
работает, за исключением случаев, когда имя столбца и имя объекта эквивалентны. Подробности см. В приведенном ниже примере.
Я ожидаю, что data
вернет только те строки, где data$year
соответствует year
или data$month
соответствует month
, но вместо этого он возвращает все значения.
Я уже проделывал эту операцию много раз, поэтому я не уверен, почему она происходит в этот раз.
При переименовании month
в month_by_a_different_name
все работает как положено. Есть идеи? Спасибо за ваше время.
library(tidyverse)
# Example data
data <-
tibble(
year = c(2019, 2018, 2017),
month = c("January", "February", "March"),
value = c(1, 2, 3)
)
# -----------------------------------------------
# Values to filter by
year <- 2019
month <- "February"
# Assigning year and month to a different object name
year_by_a_different_name <- year
month_by_a_different_name <- month
# -----------------------------------------------
# Filtering using year and month doesn't work
data %>%
dplyr::filter(year == year) # Doesn't work
data %>%
dplyr::filter(month == month) # Doesn't work
# -----------------------------------------------
# Filtering using different names works
data %>%
filter(year == year_by_a_different_name) # Works
data %>%
filter(month == month_by_a_different_name) # Works
# -----------------------------------------------
# Using str_detect() also doesn't work for month
data %>%
dplyr::filter(str_detect(month, month))
# -----------------------------------------------
# Works with base R
data[data$month == month, ]
data[data$year == year, ]
# -----------------------------------------------
# Objects are of same class
class(data$year) == class(year) # TRUE
class(data$month) == class(month) # TRUE