Ermittlung des Alters anhand von Datum

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
Chrispe
Beiträge: 1
Registriert: Di Jan 01, 2019 7:37 pm

Ermittlung des Alters anhand von Datum

Beitrag von Chrispe »

Guten Abend liebe Community,


mein erster Post und gleich eine Frage - vll ein wenig Schande auf mein Haupt, doch schließlich ist ein Forum ja auch für Fragen da :)

Leider habe ich bei einer aktuellen Umfrage von mir einen kleinen Fehler gemacht, und anstelle des Alters das Geburtsdatum abgefragt... merkwürdigerweise dachte ich, dass ich daraus ja schnell das Alter ermitteln kann, doch raubt mir unser geliebtes "R" nun den Verstand...


Folgendes Zeigt mir die Spalte "P1" an:

Code: Alles auswählen

[1] "1989-09-20 00:00:00"
... und noch viele weitere Werte

Natürlich würde ich mir nichts inniger wünschen, als dass dort "29" stünde (als Alter). Gerne auch in der nächsten Spalte..

Aktuell bin ich soweit, dass ich wenigstens das exakte Alter in Tagen habe.. :roll: :lol:

Code: Alles auswählen

as.Date(P1[1-53])-as.Date(Sys.time())
Time differences in days
 [1] -10695 ....und viele weitere
Doch wie bekomme ich dies nun entweder in eine neue Spalte (und am besten in Jahren) oder ersetzte am besten das Datum durch das aktuelle Alter?


Vielen Dank im Voraus für eure Unterstützung! :)

vG

Chrispe
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Ermittlung des Alters anhand von Datum

Beitrag von jogo »

Hallo Chrispe,

willkommen im Forum!
Reicht Dir auch eine grobe Näherung?

Code: Alles auswählen

P1 <- "1989-09-20 00:00:00"
Alter <- 2018 - as.numeric(substr(P1, 1, 4))
Gruß, Jörg
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Ermittlung des Alters anhand von Datum

Beitrag von Athomas »

Durch googeln findet man in https://stackoverflow.com/questions/361 ... -ages-in-r diese solide Lösung:

Code: Alles auswählen

age = function(from, to) {
  from_lt = as.POSIXlt(from)
  to_lt = as.POSIXlt(to)
  
  age = to_lt$year - from_lt$year
  
  ifelse(to_lt$mon < from_lt$mon |
           (to_lt$mon == from_lt$mon & to_lt$mday < from_lt$mday),
         age - 1, age)
}

Datumsstring <- c("1972-01-01 00:00:00", "1981-12-22 00:00:00","1990-06-23 00:00:00","1999-09-24 00:00:00")
heute        <- Sys.Date()
Alter        <- age(Datumsstring, heute)
Antworten