2017-05-12 1 views
0

Wie kann ich das Alter in einem großen Datensatz berechnen, indem Einträge ausgeschlossen werden, deren jüngstes Datum vor dem Geburtsdatum liegt, wahrscheinlich aufgrund von Dateneingabeproblemen in r dob < -c ("02/02/2005", "12/04/2005", "18/06/2006", "22/06/2007", "04/08/2002", "15/02/2006 ") Probenahme < -c (" 14/05/2014 "," 18/08/2016 "," 12/02/2002 "," 12/08/2012 "," 13/07/2015 " , "09/09/2013") df = data.frame (dob, sampledate) Ansicht (df) df $ dob = as.Datum (df $ dob, "% d /% m /% Y") df $ sampledate = as.Date (df $ Probenahme, "% d /% m /% Y")Berechnung des Alters in einem großen Datensatz, in dem einige jüngere Datumseinträge vor dem Geburtsdatum liegen

-Bibliothek (eeptools) df $ age = age_calc (dob = df $ dob, enddate = df $ sampledate, Einheiten = "Jahre")

Fehler bei age_calc (dob = df $ dob, enddate = df $ sampledate, Einheiten = „Jahr“): Enddatum ein Datum nach dem Geburtsdatum sein muss

wie kann ich die andere berechnen und schließen die dritte Beobachtung

Antwort

0

Sie das dplyr Paket hier gezeigt verwenden könnten ...

dob <- c("02/02/2005","12/04/2005","18/06/2006","22/06/2007","04/08/2002","15/02/2006") 
sampledate <-c("14/05/2014","18/08/2016","12/02/2002","12/08/2012","13/07/2015","09/09/2013") 
df <- data.frame(dob,sampledate) 
df$dob <- as.Date(df$dob,"%d/%m/%Y") 
df$sampledate <- as.Date(df$sampledate,"%d/%m/%Y") 

library(dplyr) 
df.valid <- df %>% mutate(valid = sampledate >= dob) %>% filter(valid) 

library(eepools) 
df.valid$age <- age_calc(dob = df.valid$dob , enddate = df.valid$sampledate, units = "years") 
0
library(lubridate) # better date conversion 
library(data.table) # faster everything 
library(eeptools) 

df = data.table(dob, sampledate) 

df[, `:=` (
    dob = dmy(dob), 
    sampledate = dmy(sampledate) 
)] 

df[dob < sampledate, age := age_calc(dob, sampledate, "years")] 
0

können Sie difftime verwenden Alter zu berechnen, ohne eeptools

df$age<-as.numeric(difftime(df$sampledate,df$dob))/365.25 
0

können Sie nur Alter leicht wie folgt berechnen:

df$age = as.numeric(floor((df$sampledate - df$dob)/365.25)) 

Dann können Sie Zeilen mit Minus Alter löschen:

df = df[which(df$age>=0),] 
Verwandte Themen