Formattazione condizionale di una colonna con il mutare e regex in R

0

Domanda

Sono nuovo di zecca in R e della programmazione in generale. Ho una colonna contenente un elenco di date. Alcuni sono nel "01 gennaio 2020" formato, alcuni hanno solo il mese e l'anno (vale a dire "gennaio 2020" solo). Voglio mutare a un nuovo campo in cui posso aggiungere un 01 davanti a tutte le date che nel mese anno formato, e poi io uso lubridate di processo in date

Questo è quello che ho provato. Sto cercando di estrarre il primo carattere della colonna Data. Se è una lettera maiuscola, quindi sarà aggiungere "01" a farlo. Io sto usando la tinyverse pacchetto compreso dplyr

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

Ricevo il messaggio di errore "non è mancante", ma ho pensato che ho inserito new_date = Date per mantenere la formattazione corrente.

Grazie per il vostro aiuto!

2

Migliore risposta

1

Questo può essere fatto in molti modi.

base R utilizzando lookahead e di riferimento:

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

base R utilizzando solo riferimento:

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

dplyr e stringr con la stessa logica:

library(dplyr)
library(stringr)

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

Se si ostini a usare ifelse:

library(dplyr)
library(stringr)

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

Dati:

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

Qui non è una regex opzione dove abbiamo convertire Date classe e format si

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

dati

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

In altre lingue

Questa pagina è in altre lingue

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