2017-07-11 1 views
0

Ich möchte das Datum einer Spaltenreferenz extrahieren (ich möchte von (21510000XXX -> 10/2015) übergeben. Das Problem ist, dass die Referenzen für die Jahre 2015 und 2016 nicht die sind gleicher Bezug auf das Jahr 2017.Datum aus einer Referenz extrahieren

Es ist so:

DF<-c(21612000675, 21612000494, 20170100011, 21507000583, 21508000306) 

DF [1] 21612000675 21612000494 20170100011 21507000583 21508000306

Die erste ist Jahr 2016, Monat 12 ("216", "12" Nummer)), die dritte ist anders, wie alle 2017, also Jahr 2017, Monat 01 ("2017", "01", Nummer), die Letztes, wie Jahr 2015, ist das gleiche wie Jahr 2016, also Jahr 2015 Monat 08 ("2015", "08", Nummer)

+1

Ich verstehe nicht sehr gut, was Sie wollen. Möchten Sie die Daten bereinigen, oder? Ich meine, willst du die Daten mit dem gleichen Muster schreiben? Oder möchten Sie bestimmte Daten aus der Spalte extrahieren? Es ist nicht sehr klar. –

+0

Ich möchte das Jahr und den Monat jedes Verweises "20170100XX -> 01/2017" –

Antwort

1

Versuchen Sie dies!

library(dplyr) 
library(stringr) 

ym <- str_extract(DF, '^(215|216|2017)[0-9]{2}') %>% 
     gsub(pattern = '^215', replacement = '2015') %>% 
     gsub(pattern = '^216', replacement = '2016') %>% 
     gsub(pattern = '(20[0-9]{2})', replacement = '\\1\\/') 
> ym 
[1] "2016/12" "2016/12" "2017/01" "2015/07" "2015/08" 

EDIT:

Wenn Sie wollen Monate vor Jahren versuchen:

ym <- str_extract(DF, '^(215|216|2017)[0-9]{2}') %>% 
     gsub(pattern = '^215', replacement = '2015') %>% 
     gsub(pattern = '^216', replacement = '2016') %>% 
     gsub(pattern = '(20[0-9]{2})([0-9]{2})', replacement = '\\2\\/\\1') 
> ym 
[1] "12/2016" "12/2016" "01/2017" "07/2015" "08/2015" 
0

Sie können versuchen, die Muster konsistent zu machen. Zum Beispiel

gsub("^(21)(5|6)", "\\10\\2", DF) 
> [1] "210612000675" "210612000494" "20170100011" "210507000583" "210508000306" 

Werfen Sie einen Blick auf ?gsub.

Das erste Argument ist das Muster, beliebige Zeichenfolge in diesem Fall übereinstimmen, die mit 21 durch entweder5 oder 6 daher ^(21)(5|6) gefolgt den String beginnt.

Das zweite Argument ist die Ersetzung, in diesem Fall eine 0 zwischen der ersten und zweiten "Capture-Gruppen" in Ihrem Muster. Das dritte Argument ist, was Sie ändern möchten.

+0

extrahieren Sobald Sie die Strings standardisieren, können Sie 'gsub' erneut verwenden, um Ihr' MM/YYYY' Format zu erhalten: 'gsub ("^(\\ d {4}) (\\ d {2}). * "," \\ 2/\\ 1 ", DF)' – juan

Verwandte Themen