Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: R: Henkilötunnuksen käsittelyä

LCHawk [09.11.2016 01:26:48]

#

Suomalaisten henkilötunnisten käsittely toimii hyvänä esimerkkinä siitä, miten R-ohjelmalla käsitellään merkkijonoja. Tässä olisi sukupuolen ja iän laskenta:

Sukupuoli:

gender<-function(id){
  parts<-strsplit(id,split="-")[[1]]
  secondpart<-parts[2]
  number<-substr(secondpart,1,3)
  int<-as(number,"integer")
  if(int%%2==0){
    return("F")
  }else{
    return("M")
  }
}

ikä päivinä:

#calculate age by days
age<-function(id){
  parts<-strsplit(id,split="-")[[1]]
  firstpart<-parts[1]
  numerona<-as(firstpart,"integer")
  today<-Sys.Date()
  shortyear<-as(substr(firstpart,5,6),"integer")
  if(substr(id,7,7)=="-"){
    longyear<-1900+shortyear
  }else{
    longyear<-2000+shortyear
  }
  bage<-as.Date(paste0(substr(firstpart,1,2),".",substr(firstpart,3,4),".",longyear),format="%d.%m.%Y")
  agedays<-difftime(today,bage,units = "days")
  return(as(agedays,"double"))
}

Löytyvät myös GitHubista

Metabolix [09.11.2016 19:36:55]

#

Mielestäni koodia selventäisi huomattavasti, jos siinä olisi (yleisesti käytettyyn tapaan) välilyönnit aina operaattoreiden molemmin puolin ja pilkkujen jälkeen.

# EI
if(substr(id,7,7)=="-"){
  longyear<-1900+shortyear
}else{
  #jne.
}
# KYLLÄ
if (substr(id, 7, 7) == "-") {
  longyear <- 1900 + shortyear
} else {
  # jne.
}

groovyb [10.11.2016 10:46:51]

#

omaan silmään }else{ -tapa näyttää tökeröltä ja luettavuus heikkenee.

Grez [11.11.2016 09:41:22]

#

Jos on käsittelyssä elävät henkilöt esim. järjestelmään joka on K18, niin pelkällä viivalla pärjää vielä reilun vuoden :D

feenix [13.11.2016 12:39:52]

#

Grez kirjoitti:

Jos on käsittelyssä elävät henkilöt esim. järjestelmään joka on K18, niin pelkällä viivalla pärjää vielä reilun vuoden :D

Tukeehan tuo nuorempiakin, tuossa vain viiva on erikoistapaus. Kunhan ei käsittele yli 116 vuotta sitten syntyneitä eikä välitä validiudesta niin "toimii" :P

Metabolix [14.11.2016 17:01:39]

#

feenix kirjoitti:

Tukeehan tuo nuorempiakin, tuossa vain viiva on erikoistapaus.

Ensimmäinen funktio (sukupuolen tarkastus) ei tue nuorempia, koska siinä haetaan henkilötunnuksen loppuosa viivan perusteella.

Kyllä tätä pitäisi korjata.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta