Wie kann ich die ersten Elemente aus einer Variablen entfernen, insbesondere wenn diese Variable Sonderzeichen enthält? Zum Beispiel habe ich die folgende Spalte:
Date
01/01/2009
01/01/2010
01/01/2011
01/01/2012
Ich brauche eine neue Spalte wie die folgende:
Date
2009
2010
2011
2012
format
das 'Jahr' extrahierengsub(".*/","",df$Date)
substr(as.character(....), 7, 10)
lubridate::year
sollte auch den Trick machen, wenn die Daten im 'Date'-Format vorliegen, wie von @akrun vorgeschlagen.Date
und eineformat
oder andere Funktionen zu verwenden, um Teile davon zu extrahieren. Zum Beispielx <- as.Date("01/01/2009", format = "%m/%d/%Y"); lubridate::year(x)
.Antworten:
Wenn alle Ihre Daten dieselbe Breite haben, können Sie die Daten in einen Vektor einfügen und Teilzeichenfolgen verwenden
Date a <- c("01/01/2009", "01/01/2010" , "01/01/2011") substring(a,7,10) #This takes string and only keeps the characters beginning in position 7 to position 10
Ausgabe
[1] "2009" "2010" "2011"
quelle
as.numeric(substring(a,7,10))
Wie in den Kommentaren erläutert, kann dies erreicht werden, indem der Eintrag in ein
Date
Format konvertiert und das Jahr extrahiert wird, beispielsweise wie folgt:format(as.Date(df1$Date, format="%d/%m/%Y"),"%Y")
quelle
format()
die Dokumentation ansehe, wird nichts über das zweite Argument gesagt, das Sie angegeben haben. Wie soll ich das verstehen??format
: "Format ist eine generische Funktion . Neben den hier beschriebenen Methoden gibt es Methoden für Datumsangaben ( siehe format.Date )". From?format.Date
: "## S3-Methode für das Format 'Date' (x, ...) [wobei ... bezeichnet] weitere Argumente, die von oder an andere Methoden übergeben werden sollen, einschließlich des Formats für die Methoden as.character und as.Date . ". Siehe auch das erste Beispiel in?format.Date
.library(lubridate) a=mdy(b) year(a)
https://cran.r-project.org/web/packages/lubridate/vignettes/lubridate.html http://vita.had.co.nz/papers/lubridate.pdf
quelle
Wenn Sie Ihre Variable konvertieren in
Date
:date <- as.Date('10/30/2018','%m/%d/%Y')
Sie können dann die gewünschten Elemente ausschneiden und neue Variablen erstellen, z. B. Jahr:
year <- as.numeric(format(date,'%Y'))
oder Monat:
month <- as.numeric(format(date,'%m'))
quelle
Dies ist mehr ein Rat als eine bestimmte Antwort, aber mein Vorschlag ist, Datumsangaben sofort in Datumsvariablen umzuwandeln, anstatt sie als Zeichenfolgen beizubehalten. Auf diese Weise können Sie Datums- (und Uhrzeit-) Funktionen verwenden, anstatt zu versuchen, sehr problematische Problemumgehungen zu verwenden.
Wie bereits erwähnt, verfügt das Schmiermittelpaket über schöne Extraktionsfunktionen.
Bei einigen Projekten habe ich festgestellt, dass das Zusammensetzen von Daten von Anfang an hilfreich ist: Erstellen Sie zunächst Variablen für Jahr, Monat, Tag (des Monats) und Tag (der Woche). Dies kann Zusammenfassungen, Tabellen und Grafiken vereinfachen, da der Extraktionscode vom Zusammenfassungs- / Tabellen- / Grafikcode getrennt ist und Sie diese Änderungen nicht an mehreren Stellen einführen müssen, wenn Sie sie ändern müssen.
quelle
Wenn Sie das
date
Paket verwenden , kann dies ziemlich einfach durchgeführt werden.library(date) Date <- c("01/01/2009", "01/01/2010", "01/01/2011", "01/01/2012") Date <- as.date(Date) Date # [1] 1Jan2009 1Jan2010 1Jan2011 1Jan2012 date.mdy(Date)$year # [1] 2009 2010 2011 2012 ## be aware that these are now integers and thus different methods may be invoked: str(date.mdy(Date)$year) # int [1:4] 2009 2010 2011 2012 summary(Date) # First Last # "1Jan2009" "1Jan2012" summary(date.mdy(Date)$year) # Min. 1st Qu. Median Mean 3rd Qu. Max. # 2009 2010 2010 2010 2011 2012
quelle
Seit einiger Zeit können Sie sich auch nur auf das
data.table
Paket und seineIDate
Klasse sowie die zugehörigen Funktionen verlassen (Check?as.IDate()
). Sie müssen also nicht zusätzlich installierenlubridate
.require(data.table) a <- c("01/01/2009", "01/01/2010" , "01/01/2011") year(as.IDate(a, '%d/%m/%Y')) # all data.table functions
quelle