Condicionalmente a formatação de uma coluna com mutação e regex em R

0

Pergunta

Eu sou novo no R e programação em geral. Eu tenho uma coluna que contém uma lista de datas. Alguns estão a "01 de janeiro de 2020" de formato, alguns têm apenas o mês e o ano (ou seja, "de janeiro de 2020" apenas). Eu quero transformar-los para um novo campo, onde eu adicionar um 01 na frente de todas as datas que estão no mês formato de ano, e, em seguida, vou usar lubridate para processá-lo em datas

Isso é o que eu tentei. Eu estou tentando extrair o primeiro caractere da coluna de Data. Se é uma maiúscula, então vou acrescentar "01" para ele. Eu estou usando o tinyverse pacote incluindo dplyr

df %>% mutate(new_date = ifelse(str_sub(Date, start = 1, end = 1)== "[:upper:]"), paste('01', Date, sep = ' '), new_date = Date)

Estou recebendo a mensagem de erro "não é falta", mas eu pensei que eu ter incluído new_date = Date para manter a formatação atual.

Obrigado por sua ajuda!

2

Melhor resposta

1

Isso pode ser feito de muitas maneiras.

base R usando lookahead e retrorreferência:

sub("(^)(?=[A-Za-z]+)", "\\101 ", date, perl = TRUE)
[1] "01 January 2020"  "01 January 2020"  "12 February 1999" "01 March 2033"

base R usando apenas retrorreferência:

sub("(^[A-Za-z]+)", "01 \\1", date, perl = TRUE)

dplyr e stringr usando a mesma lógica:

library(dplyr)
library(stringr)

data.frame(date) %>%
  mutate(date = str_replace(date, "(^)(?=[A-Za-z]+)", "\\101 "))

Se você insistir em usar ifelse:

library(dplyr)
library(stringr)

data.frame(date) %>% 
  mutate(date = ifelse(str_detect(date, "^[:upper:]"),
                       sub("^", "01 ", date),
                       date))

Dados:

date <- c("01 January 2020","January 2020", "12 February 1999", "March 2033")
2021-11-23 16:57:14
0

Aqui é um não-regex opção onde podemos converter para Date classe e format ele

library(parsedate)
format(parse_date(date), '%d %B %Y')
[1] "01 January 2020"  "01 January 2020"  "12 February 1999" "01 March 2033"  

dados

date <- c("01 January 2020","January 2020", "12 February 1999", "March 2033")
2021-11-23 16:43:44

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................