Suppose I have a small dataframe> aaTarget 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 -- ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~. ___ Patrick Connolly {~._.~} Great minds discuss ideas _( Y )_ Average minds discuss events (:_~*~_:) Small minds discuss people (_)-(_) ..... Eleanor Roosevelt ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.
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/
Hi, Patrick, I think (with reshape from the stats package) reshape( aa, idvar = "ID", v.names = "Eaten", timevar = "Target", direction = "wide") does the trick (followed by renaming the columns of the resulting data frame). Hth -- Gerrit On Tue, 22 Jan 2013, 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 > > -- > ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~. > ___ Patrick Connolly > {~._.~} Great minds discuss ideas > _( Y )_ Average minds discuss events > (:_~*~_:) Small minds discuss people > (_)-(_) ..... Eleanor Roosevelt > > ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~. > > ______________________________________________ > R-help at 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. >
Hi, ID is not the value column. Your casting call should be dcast(aa, ... ~ Target, value.var = "Eaten") Best, Ista On Tue, Jan 22, 2013 at 4:23 AM, Patrick Connolly <p_connolly at slingshot.co.nz> 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 > > -- > ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~. > ___ Patrick Connolly > {~._.~} Great minds discuss ideas > _( Y )_ Average minds discuss events > (:_~*~_:) Small minds discuss people > (_)-(_) ..... Eleanor Roosevelt > > ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~. > > ______________________________________________ > R-help at 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.
Hi, This could be done with ?aggregate() res<-aggregate(aa$Eaten,by=list(ID=aa$ID),FUN=function(x) x) res1<-data.frame(ID=res[,1],data.frame(res[[2]])) ?names(res1)[2:3]<-unique(aa$Target) ?res1 #? ID TPP GPA #1? 1?? 0?? 9 #2? 2?? 1? 11 #3? 3?? 3?? 8 #4? 4?? 1?? 8 #5? 5?? 2? 10 A.K. ----- Original Message ----- From: Patrick Connolly <p_connolly at slingshot.co.nz> To: R-help <r-help at r-project.org> Cc: Sent: Tuesday, January 22, 2013 4:23 AM Subject: [R] Simple use of dcast (reshape2 package) 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 -- ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.? ? ___? ? Patrick Connolly? {~._.~}? ? ? ? ? ? ? ? ? Great minds discuss ideas? ? _( Y )_? ??? ? ? ? ? Average minds discuss events (:_~*~_:)? ? ? ? ? ? ? ? ? Small minds discuss people? (_)-(_)? ??? ? ? ? ? ? ? ? ? ? ? ? ..... Eleanor Roosevelt ??? ? ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~. ______________________________________________ R-help at 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.