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.