La mise en forme conditionnelle d'une colonne avec de muter et de regex dans la R

0

La question

Je suis tout nouveau dans la R et la programmation en général. J'ai une colonne qui contient une liste de dates. Certains sont dans le "01 janvier 2020", format, certains ont seulement le mois et l'année (c'est à dire "janvier 2020" seulement). Je veux muter vers un nouveau champ où j'ai ajouter un 01 en face de toutes les dates dans le mois de l'année en forme, puis je vais utiliser lubridate de processus dans les dates

C'est ce que j'ai essayé. Je suis d'essayer d'extraire le premier caractère de la colonne Date. Si c'est une majuscule, alors je vais ajouter "01" pour elle. Je suis l'aide de la tinyverse du paquet, y compris dplyr

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

Je reçois le message d'erreur "pas de manque", mais j'ai pensé que j'ai compris new_date = Date pour conserver la mise en forme actuelle.

Merci pour votre aide!

2

La meilleure réponse

1

Cela peut être fait de plusieurs façons.

base R à l'aide d'anticipation et de backreference:

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

base R en utilisant uniquement la référence arrière:

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

dplyr et stringr en utilisant la même logique:

library(dplyr)
library(stringr)

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

Si vous n'insistez sur l'utilisation d' ifelse:

library(dplyr)
library(stringr)

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

Données:

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

Voici une regex option où nous convertir à Date classe et format il

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

données

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

Dans d'autres langues

Cette page est dans d'autres langues

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