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
>

2 Responses to “Data excelistä (csv): päivämäärä R:n ymmärtämään muotoon, osa 2”

  • Janne Huovari kirjoitti:

    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

  • Lauri Nikkinen kirjoitti:

    Kiitos, tuota en olisi kyllä itse keksinyt, näppärä tapa totta tosiaan, täytyypä ottaa käyttöön!


Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *