R-ohjelmointi.org
Tilastotieteellistä ohjelmointia R-kielellä
Data excelistä (csv): päivämäärä R:n ymmärtämään muotoon, osa 2
Pohdin edellisen postin jälkeen, että miten useamman päivämäärämuuttujan saa kerralla muutettua R:n ymmärtämään muotoon. Koska data.frame on periaatteessa lista, onnistuu se käyttämällä lapply-funktiota. Tässä esimerkki, muitakin (parempia?) keinoja varmasti on:
> #Asetetaan työalue > setwd("C:/temp/") > #Tuodaan data > p <- read.csv2("C:pvmexcel.csv", header=T, na.strings="", strip.white=T) > #tehdään regexpi, joka tarkastaa päivämäärämuodon dd.mm.yyyy > md <- "^\\d{1,2}[.]\\d{1,2}[.]\\d{1,4}$" > p[] <- lapply(p, function(x) { + if (length(grep(md, as.character(x), value=T, perl=T)) > 0) { + as.Date(strptime(as.character(x), "%d.%m.%Y"), "%Y-%m-%d") + } else { + NULL + ;x }}) > p id pvm pvm2 1 1 2009-01-01 2009-11-01 2 2 2009-01-02 2009-11-02 3 3 2009-01-03 2009-11-03 4 4 2009-01-04 2009-11-04 5 5 2009-01-05 2009-11-05 6 6 2009-01-06 2009-11-06 7 7 2009-01-07 2009-11-07 8 8 2009-01-08 2009-11-08 9 9 2009-01-09 2009-11-09 10 10 2009-01-10 2009-11-10 > |
Tyylikkäämpi tapa on tehdä oma Class-määrittely päivämäärämuodolle ja käyttää sitä read.table funktion kanssa.
setClass(”FINDate”, contains=”Date”)
setAs(”character”, ”FINDate”,
function (from) { as.Date(from, format=”%m.%d.%Y”) })
p<-read.csv2(file=’Data.csv’, colClasses=c(”numeric”, ”FINDate”))
Idea kopioitu: http://zoonek2.free.fr/UNIX/48_R/02.html
Kiitos, tuota en olisi kyllä itse keksinyt, näppärä tapa totta tosiaan, täytyypä ottaa käyttöön!