2016-07-07 10 views
0

Ich habe eine Spalte von Daten in einer Datentabelle in 6-stelligen Zahlen als solche eingegeben: 201401, 201402, 201403, 201412, etc. wo die ersten 4 Ziffern das Jahr und zweite zwei Ziffern sind Monat.Aufteilen von Spalten nach Anzahl der Zeichen

Ich versuche, diese Spalte in zwei Spalten zu spalten, eine namens "Jahr" und eine namens "Monat". Wir haben uns mit strsplit() herumgesprochen, aber wir können nicht herausfinden, wie man es schafft, statt eines Zeichenkettenmusters eine Anzahl von Zeichen zu machen, d. H. Geteilt in der Mitte der 4. und 5. Stelle.

Antwort

4

ohne externe Paket zu verwenden, können wir dies tun, mit substr

transform(df1, Year = substr(dates, 1, 4), Month = substr(dates, 5, 6)) 
# dates Year Month 
#1 201401 2014 01 
#2 201402 2014 02 
#3 201403 2014 03 
#4 201412 2014 12 

Wir haben die Möglichkeit, zu entfernen oder die Spalte zu halten.


Oder mit sub

cbind(df1, read.csv(text=sub('(.{4})(.{2})', "\\1,\\2", df1$dates), header=FALSE)) 

Oder verwenden einige Paketlösungen

library(tidyr) 
extract(df1, dates, into = c("Year", "Month"), "(.{4})(.{2})", remove=FALSE) 

Oder mit data.table

library(data.table) 
setDT(df1)[, tstrsplit(dates, "(?<=.{4})", perl = TRUE)] 
1

tidyr::separate eine ganze Zahl für seine sep Parameter annehmen kann, die an einem bestimmten Ort aufgespalten werden:

library(tidyr) 

df <- data.frame(date = c(201401, 201402, 201403, 201412)) 

df %>% separate(date, into = c('year', 'month'), sep = 4) 
## year month 
## 1 2014 01 
## 2 2014 02 
## 3 2014 03 
## 4 2014 12 
+0

Dieser Code des Datenrahmen in dem Terminal auflistet, versuchen die folgende mit einem neuen Datenrahmen zu schaffen, mit die geteilten Spalten df2 <- getrennt (df, date, in = c ('Jahr', 'Monat'), sep = 4). Beachten Sie, dass die Reihenfolge im tidyr-Paket Daten, Spalte, neue Spalten, ...) ist. –

+0

Nun ja, weisen Sie es einer Variablen zu, wenn Sie es behalten möchten. – alistaire

Verwandte Themen