Нужна помощь с ошибками / предупреждениями в следующей ситуации:
У меня есть фрейм данных с датой наблюдения и вектором таких дат. Я хочу создать новые столбцы во фрейме данных со следующими и предыдущими датами наблюдения. Вектор дат создается как:
library(glue)
dates = c("201902",
"201906",
"201911",
"202002")
dates = glue("{dates}01")
dates = dates%>%
as.Date(format = "%Y%m%d")%>%
sort()
Тогда в моем фрейме данных этот столбец состоит из dates
элементов, называемых Date
. Я хочу, чтобы он создавал столбцы со следующими и предыдущими датами, или оставлял их прежними, если это начало / конец. Я использую:
library(dplyr)
my_df = my_df%>%
mutate(First_date = (Date == dates[1]),
Last_date = (Date == dates[length(dates)]),
Prev_date = case_when(First_date ~ Date,
TRUE ~ dates[which(dates == Date)-1]),
Next_date = case_when(Last_date ~ Date,
TRUE ~ dates[which(dates == Date)+1])
ПРИМЕР: Если бы у меня был кадр данных со следующим столбцом:
>my_df$Date
[1] "2019-02-01" "2019-06-01" "2019-11-01" "2020-02-01"
Я бы хотел, чтобы он заканчивался:
>my_df$First_date
[1] TRUE FALSE FALSE FALSE
>my_df$Last_date
[1] FALSE FALSE FALSE TRUE
>my_df$Prev_date
[1] "2019-02-01" "2019-02-01" "2019-06-01" "2019-11-01"
>my_df$Next_date
[1] "2019-06-01" "2019-11-01" "2020-02-01" "2020-02-01"
У тестового фрейма данных, который я использую, есть 6 строк, и он выдает эту ошибку и предупреждения:
Error: `TRUE ~ dates[which(dates == Date) + 1]` must be length 6 or one, not 2
Run `rlang::last_error()` to see where the error occurred.
In addition: Warning messages:
1: In `==.default`(dates, Date) :
longer object length is not a multiple of shorter object length
2: In `==.default`(dates, Date) :
longer object length is not a multiple of shorter object length
Я считаю, что это как-то связано с вызовом функции which()
внутри case_when()
, внутри mutate()
, но мне не удалось точно выяснить, где это идет не так.
Я впервые спрашиваю здесь, извините за любую ошибку!