Ich versuche, eine Spalte von Daten in Date-Objekte in R zu konvertieren, aber ich kann nicht scheinen, die gewünschten Ergebnisse zu erhalten. Diese Personen haben Geburtsdaten vor dem 1. Januar 1970, also wenn ich as.Date
R verwende, konvertiert ein Datum wie 1/12/54 zum Beispiel zu 2054-01-12. Wie kann ich das umgehen? Vielen Dank.Konvertieren von Daten vor dem 1. Januar 1970 in R
Antwort
Wenn alles in den 1900er Jahren ist, ist es ein One-Liner - nur formatieren Sie es mit einem zweistelligen Jahr am Anfang und schlagen Sie eine 19 auf der Vorderseite und konvertieren zu einem Datum. Nochmal. Man würde dies aussehen etwas%>% Hamlish:
s = c("1/12/54","1/12/74")
as.Date(format(as.Date(s,format="%d/%m/%y"), "19%y%m%d"), "%Y%m%d")
# [1] "1954-12-01" "1974-12-01"
Wenn Jahren von "69" bis "99" sind 1800er Jahren, dann ist hier ein weiterer Einzeiler:
library(dplyr) # for pipe operator:
s %>% as.Date(format="%d/%m/%y") %>%
format("%y%m%d") %>%
(function(d){
paste0(ifelse(d>700101,"18","19"),d)
}) %>%
as.Date("%Y%m%d")
## [1] "1954-12-01" "1874-12-01"
Hinweis nicht gründlich getestet, so möglicherweise einige off-by-one-Fehler oder ich habe Monate und Tage gemischt, weil Sie müssen ISO8601 Compliant
Upvote nur für kreative Zerstörung durch die '%>%'. –
Das ist genau das, was ich brauchte. – user122514
ich tun würde:
library(lubridate)
x <- as.Date("1/12/54", format = "%m/%d/%y")
year(x) <- 1900 + year(x) %% 100
> x
[1] "1954-01-12"
schlägt fehl für Daten nach Jahr = "70". OP besagt, dass Geburtsdaten vor 1970-01-01 sind, also "1/12/74" sollte ** 1874 ** – Spacedman
Offensichtlich würde das Anwenden auf einen Vektor eine robustere Lösung erfordern, aber ich bin ziemlich sicher, dass OP ein 'schreiben kann Ifelse oder zwei, um dort mit den Werkzeugen zu kommen, die ich zur Verfügung gestellt habe! –
Vielen Dank für Ihre Antwort. :-) – user122514
Keine Notwendigkeit für Add-On-Pakete ist Basis R in Ordnung. Aber Sie müssen das Jahrhundert spezifizieren:
R> as.Date("1954-01-12")
[1] "1954-01-12"
R>
Wenn Sie Nicht-Standard-Formate benötigen, sie nur angeben:
R> as.Date("19540112", "%Y%m%d")
[1] "1954-01-12"
R>
Edit: Falls Ihre Daten wirklich im Umgang mit dem %y%
Format kommt, und Sie geschehen, um die Richtlinie zu entscheiden, dass das 19. Jahrhundert benötigt wird , hier ist eine Basis R Art und Weise tun:
R> d <- as.Date("540112", "%y%m%d")
R> dlt <- as.POSIXlt(d)
R> dlt$year <- dlt$year - 100
R> as.Date(dlt)
[1] "1954-01-12"
R>
Ich denke diese Antwort hilft OP nicht, da du nicht erklärst, wie du das Jahrhundert "spezifizierst", das heißt, wie du von einem String ** Vektor ** des Formats "% m /% d /% y" kommst "bis"% m /% d /% Y ". Ich bin mir ziemlich sicher, OP ist sich bewusst, dass 'as.Date (" 1954-01-12 ") ihm/ihr geben würde, was er/sie braucht, aber er/sie hat dieses Format nicht. –
Ich habe eine Basis R hinzugefügt. Noch keine Notwendigkeit für Add-ons. –
Das sieht besser aus! –
- 1. Daten vor dem 1. Januar 1970
- 2. Java.util.Calendar - Millisekunden seit dem 1. Januar 1970
- 3. Scala UTC Zeitstempel in Sekunden seit dem 1. Januar 1970
- 4. Verwenden von strtotime für Daten vor 1970
- 5. awk mit Daten vor 1970
- 6. Wie bekomme ich UTCTime in Millisekunde seit dem 1. Januar 1970 in c Sprache
- 7. Konvertieren z. 2012-05-25 bis Sekunden seit 1. Januar 1970
- 8. Warum ist 1/1/1970 die "Epoche"?
- 9. MySQL: Arbeiten mit Daten vor 1970
- 10. Warum strtotime (1. Januar 1970) -3600 statt 0 in PHP zurückgibt?
- 11. Unix Zeitstempel immer wieder 17. Januar 1970 in DateTime
- 12. Wie Tag/Monat/Jahr Datum in .NET Stil 100ns Ticks seit dem 1. Januar 0001 konvertieren?
- 13. PHP-Datumsausgabe, Datum vor 1970-01-01 nicht konvertieren
- 14. php Format Datum vor 1970 von MySQL einfügen
- 15. Unix Zeitstempel vor 1970 (noch vor 1700), mit PHP
- 16. Konvertieren von Datum und Uhrzeit in Anzahl von Sekunden seit 1970
- 17. Wie kann ich eine DateTime in die Anzahl der Sekunden seit 1970 konvertieren?
- 18. NSDate vor 1 Jahr
- 19. konvertieren stündliche Daten in Zeitreihen in r
- 20. Cronjob für den 1. Januar jedes Jahr
- 21. R jsonlite Filter Datensätze vor dem Laden
- 22. Konvertieren (0,1,0, 0, 1, 1, 1) zu (0, 0, 0, 1, 0, 1, 2) in R
- 23. R Daten einfügen in Klassenfaktor
- 24. Konvertieren von Zeichen zu Datum in R
- 25. Konvertieren von Zeichenfolge in Numerische in R
- 26. Wie konvertiert 1. Januar 2008 in C# datetime
- 27. Warum wird eine Stunde für java.util.Date für Daten vor dem 1. November 1971 hinzugefügt?
- 28. R - Konvertieren von Daten von Bruch zu Dezimal
- 29. Sanitizing Daten vor dem Mungo
- 30. Verwenden von Daten in R
Wie können Sie entscheiden, was richtig ist, z im Falle '1/1/16': Ist es 2016 oder 1916? – Christoph
@christoph nichts mit einem 2-stelligen Jahr nach "69" muss ** 18 ** 70 sein. – Spacedman