Как конвертировать дату в текст в R? - PullRequest
0 голосов
/ 15 марта 2020

Рассмотрим df

 Dates
 Sun 22nd Jul
 Sat 20th Jul

Как мне изменить это в текстовый формат? Год не был дан, есть ли способ сделать это в текст?

я пытался

df %>% mutate(Date2 = as.Date(Dates, "%w%b%m"))

, но каждый столбец подходил как NA

1 Ответ

0 голосов
/ 15 марта 2020

Вот немного надуманный метод для вывода года, основанный на сопоставлении предоставленного дня недели.

library(dplyr)
library(tidyr)
df <- tibble(Dates = c("Sun 22nd Jul", "Sat 20th Jul"))
guesses <- df %>%
  mutate(
    rn = row_number(),
    DOW = gsub(" .*", "", Dates),
    Date1 = gsub("(?<=[0-9])(st|nd|rd|th)\\b", "", Dates, perl = TRUE),
    Date1 = gsub("^\\D*(?=[0-9])", "", Date1, perl = TRUE)
  ) %>%
  crossing(
    Year = 2000:2020
  ) %>%
  mutate(
    Date2 = as.Date(paste(Date1, Year), format = "%d %b %Y"),
    DOW2 = format(Date2, format = "%a")
  ) %>%
  filter(DOW == DOW2)
guesses
# # A tibble: 7 x 7
#   Dates           rn DOW   Date1   Year Date2      DOW2 
#   <chr>        <int> <chr> <chr>  <int> <date>     <chr>
# 1 Sat 20th Jul     2 Sat   20 Jul  2002 2002-07-20 Sat  
# 2 Sat 20th Jul     2 Sat   20 Jul  2013 2013-07-20 Sat  
# 3 Sat 20th Jul     2 Sat   20 Jul  2019 2019-07-20 Sat  
# 4 Sun 22nd Jul     1 Sun   22 Jul  2001 2001-07-22 Sun  
# 5 Sun 22nd Jul     1 Sun   22 Jul  2007 2007-07-22 Sun  
# 6 Sun 22nd Jul     1 Sun   22 Jul  2012 2012-07-22 Sun  
# 7 Sun 22nd Jul     1 Sun   22 Jul  2018 2018-07-22 Sun  

(Выбор 2000 в качестве отправной точки был произвольным Должно быть проинформировано о ваших знаниях об источнике данных.)

Если мы предположим, что необходим самый последний, то

guesses %>%
  arrange(desc(Date2)) %>%
  group_by(rn) %>%
  slice(1) %>%
  ungroup()
# # A tibble: 2 x 7
#   Dates           rn DOW   Date1   Year Date2      DOW2 
#   <chr>        <int> <chr> <chr>  <int> <date>     <chr>
# 1 Sun 22nd Jul     1 Sun   22 Jul  2018 2018-07-22 Sun  
# 2 Sat 20th Jul     2 Sat   20 Jul  2019 2019-07-20 Sat  

Если предположим, что они все в одном и том же году имеет решающее значение, тогда

guesses %>%
  group_by(Year) %>%
  filter(all(df$Dates %in% Dates)) %>%
  ungroup()

(К сожалению, для этих данных он ничего не показывает, что крайне маловероятно.)

Конечно, существуют и другие методы вывода Можно попытаться угадать скрытые годы.

Отсюда все, что вам нужно, это столбец Date2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...