Formato condicional a una columna con mutar y regex en R

0

Pregunta

Soy nuevo en R y la programación en general. Tengo una columna que contiene una lista de fechas. Algunos están en el "01 de enero de 2020" formato, algunos tienen sólo el mes y el año (es decir, "de enero de 2020" solamente). Quiero mutar a un campo nuevo donde puedo añadir un 01 en frente de todas las fechas que están en el mes año formato y, a continuación, voy a utilizar lubridate a proceso en las fechas

Esto es lo que he intentado. Estoy tratando de extraer el primer carácter de la columna de la Fecha. Si es una letra mayúscula, a continuación, voy a anexar "01" a ella. Yo estoy usando la tinyverse paquete incluyendo dplyr

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

Estoy recibiendo el mensaje de error "sin falta", pero pensé que me han incluido new_date = Date para mantener el actual formato.

Gracias por su ayuda!

2

Mejor respuesta

1

Esto se puede hacer de muchas maneras.

base R el uso de oteo y referencias inversas:

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

base R el uso sólo de referencia inversa:

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

dplyr y stringr utilizando la misma lógica:

library(dplyr)
library(stringr)

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

Si usted insiste en el uso de ifelse:

library(dplyr)
library(stringr)

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

Datos:

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

Aquí no es una opción regex donde tratamos de convertir a Date clase y format es

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

datos

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

En otros idiomas

Esta página está en otros idiomas

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