library(dplyr)
mutate(df, `Grants Period Month` = ifelse(`Grants Period Month` == "Annual",
as.character(`Due Date`),
`Grants Period Month`))
Первое использование df %>% janitor::clean_names()
.Это даст вам чистые имена и приведенный выше код, и в целом ваши данные станут более разборчивыми с этими новыми именами.
ОБНОВЛЕНИЕ
Я пошел быстро и грязно, никаких обратных галочек,делать с мобильного телефона ... Вот мое мнение о правильной клавиатуре и R сессии.Имейте в виду, что все даты, которые не удалось проанализировать, будут преобразованы в срок.Я также добавил новые данные в новые столбцы вместо перезаписи.
df <- structure(list(`Grants Period Month` = c("Annual", "01-2014-12", "Annual", "Annual", "01-2013-06", "Annual"), `Due Date` = structure(c(16525, 16437, 16160, 17256, 15888, 16160), class = "Date"), `Late/Timely Flag` = c("On-Time", "Late", "Late", "Late", "On-Time", "Late")), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"))
library(dplyr)
df %>%
mutate(grants_period = lubridate::myd(`Grants Period Month`),
due_date = lubridate::ymd(`Due Date`)) %>%
mutate(new_col=ifelse(is.na(grants_period),
due_date,
grants_period)) %>%
mutate(new_col = lubridate::as_date(new_col))
, что приводит к
# A tibble: 6 x 6
`Grants Period Month` `Due Date` `Late/Timely Flag` grants_period due_date new_col
<chr> <date> <chr> <date> <date> <date>
1 Annual 2015-03-31 On-Time NA 2015-03-31 2015-03-31
2 01-2014-12 2015-01-02 Late 2014-01-12 2015-01-02 2014-01-12
3 Annual 2014-03-31 Late NA 2014-03-31 2014-03-31
4 Annual 2017-03-31 Late NA 2017-03-31 2017-03-31
5 01-2013-06 2013-07-02 On-Time 2013-01-06 2013-07-02 2013-01-06
6 Annual 2014-03-31 Late NA 2014-03-31 2014-03-31