[R] problem with table()

Marc Schwartz marc_schwartz at comcast.net
Mon Jan 26 19:38:43 CET 2009


on 01/26/2009 12:23 PM Dominik Hattrup wrote:
> Hey everyone,
> 
> I am looking for the easiest way to get this table
> 
> # Table2
> Year / 2000 / 2002 / 2004
> Julia / 3 / 4 / 1
> Peter / 1 / 2 / 4
> ...   /   ...   /   ...   /   ...
> 
> out of this one? 
> 
> # Table1
> name   /   year   /   cases
> Julia   /   2000   /   1
> Julia   /   2000   /   2  
> Julia   /   2002   /   4
> Peter   /   2000   /   1
> Julia   /   2004   /   1
> Peter   /   2004   /   2
> Peter   /   2002   /   2
> Peter   /   2004   /   2
> ...   /   ...   /   ...
> 
> Code for table1:
> name <- c('Julia','Julia','Julia','Peter','Julia','Peter','Peter','Peter')
> year <- c(2000,2000,2002,2000,2004,2004,2002,2004)
> cases <- c(1,2,4,1,1,2,2,2)
> table1 <- data.frame(name,year,cases)
> 
> Thanks! Dominik

table() generates frequencies from individual values, not from already
tabulated data.

In this case, you can use xtabs():

> xtabs(cases ~ name + year, data = table1)
       year
name    2000 2002 2004
  Julia    3    4    1
  Peter    1    2    4


See ?xtabs

An alternative would be to use tapply():

> with(table1, tapply(cases, list(name = name, year = year), sum))
       year
name    2000 2002 2004
  Julia    3    4    1
  Peter    1    2    4


See ?tapply

HTH,

Marc Schwartz



More information about the R-help mailing list