Podmíněně formátování sloupce s mutovat a regex v R

0

Otázka

Jsem zbrusu nový v R a programování obecně. Mám sloupec obsahující seznam termínů. Některé jsou v "01. ledna 2020" formátu, některé mají jen měsíc a rok (tj. "leden 2020"). Chci, aby zmutovat do nové oblasti, kde jsem přidat 01 v přední části všech dat, které jsou v měsíci, rok, formát, a pak budu používat lubridate zpracovat to do data

To je to, co jsem se snažil. Snažím získat první znak sloupci Datum. Pokud je to velké písmeno, pak jsem se připojit "01". Já používám tinyverse balíček včetně dplyr

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

Dostávám chybové hlášení "nic nechybí", ale myslel jsem, že jsem součástí new_date = Date zachovat stávající formátování.

Děkujeme vám za vaši pomoc!

2

Nejlepší odpověď

1

To může být provedeno mnoha způsoby.

base R pomocí dopředného vyhledávání a backreference:

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

base R pouze pomocí backreference:

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

dplyr a stringr použití stejné logiky:

library(dplyr)
library(stringr)

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

Pokud na tom budete trvat na použití ifelse:

library(dplyr)
library(stringr)

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

Data:

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

Zde je non-regex možnost, kde můžeme převést na Date třída a format to

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

údaje

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

V jiných jazycích

Tato stránka je v jiných jazycích

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