[R] Reshape (pivot) question

hadley wickham h.wickham at gmail.com
Tue Feb 20 14:37:40 CET 2007


> Haven't quite learned to 'cast' yet, but I have always used the 'apply'
> functions for this type of processing:
>
> > x <- "id patient_id date code class eala
> +     ID1564262 1562 6.4.200612:00 5555 1 NA
> +     ID1564262 1562 6.4.200612:00 5555 1 NA
> +     ID1564264 1365 14.2.200614:35 5555 1 50
> +     ID1564265 1342 7.4.200614:30 2222 2 50
> +     ID1564266 1648 7.4.200614:30 2222 2 50
> +     ID1564267 1263 10.2.200615:45 2222 2 10
> +     ID1564267 1263 10.2.200615:45 3333 3 10
> +     ID1564269 5646 13.5.200617:02 3333 3 10
> +     ID1564270 7561 13.5.200617:02 6666 1 10
> +     ID1564271 1676 15.5.200620:41 2222 2 20"
> >
> > x.in <- read.table(textConnection(x), header=TRUE)
> > # 'by' seems to drop NAs so convert to a character string for processing
> > x.in$eala <- ifelse(is.na(x.in$eala), "NA", as.character(x.in$eala))
> > # convert date to POSIXlt so we can access the year and month
> > myDate <- strptime(x.in$date, "%d.%m.%Y%H:%M")
> > x.in$year <- myDate$year + 1900
> > x.in$month <- myDate$mon+1

To do this with the reshape package, all you need is:

> x.in$patient_id <- factor(x.in$patient_id)
> dfm <- melt(x.in, id=c("code", "month", "year"), m=c("id","patient_id"))
> cast(dfm, code + month + year ~ variable, stats)
  code month year id_n id_uniikit patient_id_n patient_id_uniikit
1 2222     2 2006    1          1            1                  1
2 2222     4 2006    2          2            2                  2
3 2222     5 2006    1          1            1                  1
4 3333     2 2006    1          1            1                  1
5 3333     5 2006    1          1            1                  1
6 5555     2 2006    1          1            1                  1
7 5555     4 2006    2          1            2                  1
8 6666     5 2006    1          1            1                  1

Which looks like what you want from your R code, but not your SQL.

Hadley



More information about the R-help mailing list