Здесь происходят две вещи. Сначала вам нужно сообщить R, что вы хотите, чтобы строка даты действительно была датой, используя as.Date
. Но когда этот вектор является датой, вы больше не можете использовать ifelse
, потому что эта (очень полезная!) Функция не работает с датами. Так что это хорошая возможность представить синтаксис case_when dplyr
, который выполняет то же самое, но более читаемым способом:
library(dplyr, warn.conflicts = FALSE)
date <- c("2019-06-01","2019-07-01","2019-10-01","2019-10-01","2019-09-01","2019-04-01","2019-04-01","2019-04-01","2019-04-01",
"2019-04-01","2018-08-01","2018-08-01","2018-08-01","2018-07-01","2018-08-01","2018-07-01","2018-07-01","2018-06-01")
df <- data.frame(date)
## first need to tell R that date is actually a date
df$date <- as.Date(df$date)
## Turns out that ifelse doesn't actually work well for dates so I'll introduce the glorious case_when function
df$season <- case_when(
between(df$date, as.Date("2018-11-30"), as.Date("2019-03-01")) ~ "Invierno",
between(df$date, as.Date("2019-02-28"), as.Date("2019-06-01")) ~ "Spring",
between(df$date, as.Date("2019-06-30"), as.Date("2019-07-01")) ~ "Summer",
TRUE ~ "Fall"
)
df
#> date season
#> 1 2019-06-01 Spring
#> 2 2019-07-01 Summer
#> 3 2019-10-01 Fall
#> 4 2019-10-01 Fall
#> 5 2019-09-01 Fall
#> 6 2019-04-01 Spring
#> 7 2019-04-01 Spring
#> 8 2019-04-01 Spring
#> 9 2019-04-01 Spring
#> 10 2019-04-01 Spring
#> 11 2018-08-01 Fall
#> 12 2018-08-01 Fall
#> 13 2018-08-01 Fall
#> 14 2018-07-01 Fall
#> 15 2018-08-01 Fall
#> 16 2018-07-01 Fall
#> 17 2018-07-01 Fall
#> 18 2018-06-01 Fall
Создано 29 мая 2020 года пакет REPEX (v0.3.0)