you could try the following: DF <- read.table(textConnection(" Target Eaten ID 50 TPP 0 1 51 TPP 1 2 52 TPP 3 3 53 TPP 1 4 54 TPP 2 5 50.1 GPA 9 1 51.1 GPA 11 2 52.1 GPA 8 3 53.1 GPA 8 4 54.1 GPA 10 5"), header = TRUE)
newDF <- as.data.frame(with(DF, tapply(Eaten, list(ID, Target), c))) newDF$ID <- unique(DF$ID) newDF I hope it helps. Best, Dimitris On 1/22/2013 10:23 AM, Patrick Connolly wrote: > Suppose I have a small dataframe > >> aa > Target Eaten ID > 50 TPP 0 1 > 51 TPP 1 2 > 52 TPP 3 3 > 53 TPP 1 4 > 54 TPP 2 5 > 50.1 GPA 9 1 > 51.1 GPA 11 2 > 52.1 GPA 8 3 > 53.1 GPA 8 4 > 54.1 GPA 10 5 > > And I want to reshape it into > > ID TPP GPA > 1 1 0 9 > 2 2 1 11 > 3 3 3 8 > 4 4 1 8 > 5 5 2 10 > > I realise that dcast function in the reshape2 package can handle much > more complicated tasks than that, but I can't make it do a simple one. > > If I simply tried > >> dcast(aa, ... ~ Target) > Using ID as value column: use value.var to override. > Aggregation function missing: defaulting to length > Eaten GPA TPP > 1 0 0 1 > 2 1 0 2 > 3 2 0 1 > 4 3 0 1 > 5 8 2 0 > 6 9 1 0 > 7 10 1 0 > 8 11 1 0 > > As per the help file, it's giving counts of the numbers in the Eaten > column since that's the default fun.aggregate value. > > My questions are: what fun.aggregate would work? Alternatively, can > value.var be set to something useful? > > TIA > -- Dimitris Rizopoulos Assistant Professor Department of Biostatistics Erasmus University Medical Center Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands Tel: +31/(0)10/7043478 Fax: +31/(0)10/7043014 Web: http://www.erasmusmc.nl/biostatistiek/ ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.