Berechnen Alter in R
Habe ich zwei Daten-frames in der R. Einen frame hat ein Personen-Jahr der Geburt:
YEAR
/1931
/1924
und dann eine andere Spalte zeigt eine neuere Zeit.
RECENT
09/08/2005
11/08/2005
Was ich will zu tun ist, subtrahieren der Jahre, so dass ich berechnen kann, in Ihrem Alter Anzahl der Jahre, aber ich bin mir nicht sicher, wie man diesen Ansatz. Jede Hilfe bitte?
relevant: stackoverflow.com/questions/31126726/...
InformationsquelleAutor Brian | 2010-08-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die folgende Funktion nimmt einen Vektoren der Date-Objekte und berechnet das Alter, richtig Buchhaltung für die Schaltjahre. Scheint eine einfachere Lösung, als alle anderen Antworten.
vermeiden
ifelse
:out <- integer(length(year)); out[idx <- to_lt$mon < from_lt$mon] <- age - 1; out[!idx] <- age]
Bitte überprüfen Sie Ihre syntax, bevor du Sie abschickst. Es gibt eine
]
zu viele-und selbst dann funktioniert es nicht richtig. Stellen Sie sich vor Sie geboren wurden. Dezember 1980 und jetzt ist Dezember 2018... Sie tun die Mathematik.InformationsquelleAutor Jim
Lösen können Sie dieses mit der lubridate Paket.
Glaube ich nicht, /1931, ist ein gemeinsames date-Klasse. Also nehme ich an, dass alle Einträge sind Zeichenketten.
Lassen Sie uns als erstes informieren R, dass die jüngsten sind Termine. Ich nehme an, die Daten in Monat/Tag/Jahr um, so dass ich mit mdy(). Wenn Sie in Tag/Monat/Jahr um nur verwenden, dmy().
Nun, sehen wir uns nun die Jahre zu zahlen, so dass wir tun können, einige Mathe mit Ihnen.
Jetzt nur die Mathematik zu tun. Jahr() extrahiert den Wert des Jahres der LETZTEN Termine.
p.s. wenn Ihr Jahres-Einträge sind eigentlich voller Termine, erhalten Sie die Differenz in Jahren mit
days
stattyears
InformationsquelleAutor Garrett
Ich verwenden einer benutzerdefinierten Funktion, siehe code unten, bequem zu bedienen im Handumdrehen und sehr flexibel (Sie müssen die
lubridate
Paket).Beispiele
Funktion
/dyears(1)
fürif(dec)
? Ist das Alter nicht mehr so etwas wie ein Zeit, und würde erfordern/years(1)
?Es war ein Fehler, aber dein Vorschlag funktioniert nicht wirklich, entweder, ich habe es für
(lubridate::days(365)+lubridate::hours(6))
interessant zu kombinieren
days()
undhours()
. darf ich freundlich nach, warum Sie wähltehours(6)
? Ah, oops, ich glaube ich habe es. Umwandlung in Dezimalzahlen. Würde dieses Konto für Schaltjahre, obwohl?Die Idee ist, dass die dezimal-Alter ist das "wirkliche Alter", der Auffassung, dass eine Konstante Länge für ein Jahr. So berücksichtigt die Schaltjahre ein Jahr sein sollte 365,25 Tage lang und 0,25 Tage 6 Stunden :). Ich hatte ein Falsches Verständnis von dem, was
dyears
Tat. versuchen :lubridate::interval(start = "2000-01-01", end = "2001-01-01")/(lubridate::days(365)+lubridate::hours(6))
dannlubridate::interval(start = "2000-03-01", end = "2001-03-01")/(lubridate::days(365)+lubridate::hours(6))
genial! Ich habe eigentlich jetzt schon Ihre Funktion auf meine Daten, und es funktioniert gut. Vielen Dank für es.
InformationsquelleAutor Moody_Mudskipper
Können Sie einige der Formatierung:
Mit Ihren Daten:
Da haben Sie Ihre Daten in einem Daten.Rahmen (ich nehme an, dass es heißt
df
), es wird mehr sein, wie dieses:In der Probe Weg. Ersetzen Sie einfach den letzten und yr mit Ihren df-Spalten.
InformationsquelleAutor Shane
Gegeben die Daten in deinem Beispiel:
Extrakt Jahr mit der
strptime
Funktion:Warum nicht? Dies löst das problem mit nur einem Konvertierungen.
InformationsquelleAutor eyjo
Basierend auf der vorherigen Antwort, konvertieren Sie Ihre Spalten für Datum-Objekte und subtrahieren. Einige Umwandlung zwischen Zeichen und numerischen notwendig ist:
Hinweis ich bin davon ausgegangen Sie, dass slash in Ihre Spalte year.
Auch, Tipp für wenn Sie Fragen zu Terminen unter anderem ein Tag, der hinter dem zwölften damit wir wissen, ob Sie eine Monat/Tag/Jahr, person oder Tag/Monat/Jahr /person.
as.Date()
erledigt die Arbeit für Sie praktisch.InformationsquelleAutor Spacedman
Ich denke, das könnte ein bisschen mehr intuitiv und erfordert keine Formatierung oder stripping:
gibt Ausgabe:
Dann können Sie verwenden, floor(), round () oder ceiling() , Runden auf eine ganze Zahl.
Sie konnte tun 365.25, das sollte nah genug sein. Wenn Sie auf der Suche für das Alter, nicht die tatsächliche Anzahl der Tage) Alter wichtiger als Kalender-Alter?
Manchmal die tatsächliche Anzahl der Tage gelebt haben ist vollkommen in Ordnung (und vielleicht besser), aber in anderen Situationen, die Sie wirklich wollen, dass die Anzahl der Kalender die Jahre, die vergangen sind. Obwohl zwei Menschen, die 65 Jahre alt sind (nach der Allgemeinen definition) gelebt haben eine unterschiedliche Anzahl von Tagen, die wir oft nicht wollen, um diese Unterscheidung zu machen. Zum Beispiel, wenn Sie berechnet, wenn jemand in den Ruhestand, fast jeder nutzt ganze Jahre eher als Tage zu machen, daß die Berechnung.
InformationsquelleAutor Allen Wang
Wirklich solide Weise, unterstützt auch Vektoren mit der
lubridate
Paket:Diese auch Konten für Schaltjahre. Ich habe einfach mal wenn jemand Geburtstag hatte, bereits.
InformationsquelleAutor MS Berends