Skip to content

Script for conditional sums of vectors

8 messages · Andrew Robinson, Dimitris Rizopoulos, andrija djurovic +4 more

#
Hi guys,

I hope you can help me with this (probably) simple query:

I have a data frame:

--------------------------

a=c(1,1,1,1,1,1,2,2,2,2,2,2)
b=c(1,1,1,2,3,4,1,1,2,2,3,4)
c=c(400,200,300,100,500,300,200,100,500,400,200,100)


data=data.frame(a=a,b=b,c=c)

--------------------------

And I would like to get the following output:

--------------------------

	b
a	1	2	3	4
1	900	100	500	300
2	300	900	200	100

--------------------------

The values in the output represent the sum of values "c" in data frame "data", for each "a" and "b" combination.

For example, where "a" = 1 and "b" = 1, the output is 400+200+300 = 900.

Please would anyone be able to provide a script to create my desired output?

Many thanks in advance,
		
Ben Gillespie
Research Postgraduate
 
School of Geography
University of Leeds
Leeds
LS2 9JT
#
try this:

a <- c(1,1,1,1,1,1,2,2,2,2,2,2)
b <- c(1,1,1,2,3,4,1,1,2,2,3,4)
c <- c(400,200,300,100,500,300,200,100,500,400,200,100)
DF <- data.frame(a, b, c)

with(DF, tapply(c, list(a, b), sum))


I hope it helps.

Best,
Dimitris
On 2/4/2013 10:29 AM, Benjamin Gillespie wrote:

  
    
#
Hello,

First, don't use "data" for a data frame, as it is a R function.

Here is a way to do what you are looking for:

a=c(1,1,1,1,1,1,2,2,2,2,2,2)
b=c(1,1,1,2,3,4,1,1,2,2,3,4)
c=c(400,200,300,100,500,300,200,100,500,400,200,100)

dat=data.frame(a=a,b=b,c=c)

dat.sum <- aggregate(c ~ a+b, dat, sum)
dat.sum <- reshape(dat.sum, timevar='b', idvar='a', direction='wide')

colnames(dat.sum) <- c('a','b.1','b.2','b.3','b.4')

HTH,
Pascal


Le 04/02/2013 18:29, Benjamin Gillespie a ?crit :
#
Thanks everyone - this seems to be the most efficient answer,

I'll do a bit of reading around too as suggested.

Thanks again,

Ben Gillespie
Research Postgraduate

School of Geography
University of Leeds
Leeds
LS2 9JT
#
Hello,

In what follows, I've renamed the data.frame 'dat', 'data' already is an 
R function.

xtabs(c ~ a + b, data = dat)


Hope this helps,

Rui Barradas

Em 04-02-2013 09:29, Benjamin Gillespie escreveu:
#
Hi,
library(reshape2)
dcast(DF,a~b,value.var="c",sum)
# ?a ? 1 ? 2 ? 3 ? 4
#1 1 900 100 500 300
#2 2 300 900 200 100
A.K.
----- Original Message -----
From: Benjamin Gillespie <gybrg at leeds.ac.uk>
To: "r-help at r-project.org" <r-help at r-project.org>
Cc: 
Sent: Monday, February 4, 2013 4:29 AM
Subject: [R] Script for conditional sums of vectors

Hi guys,

I hope you can help me with this (probably) simple query:

I have a data frame:

--------------------------

a=c(1,1,1,1,1,1,2,2,2,2,2,2)
b=c(1,1,1,2,3,4,1,1,2,2,3,4)
c=c(400,200,300,100,500,300,200,100,500,400,200,100)


data=data.frame(a=a,b=b,c=c)

--------------------------

And I would like to get the following output:

--------------------------

??? b
a??? 1??? 2??? 3??? 4
1??? 900??? 100??? 500??? 300
2??? 300??? 900??? 200??? 100

--------------------------

The values in the output represent the sum of values "c" in data frame "data", for each "a" and "b" combination.

For example, where "a" = 1 and "b" = 1, the output is 400+200+300 = 900.

Please would anyone be able to provide a script to create my desired output?

Many thanks in advance,
??? ??? 
Ben Gillespie
Research Postgraduate

School of Geography
University of Leeds
Leeds
LS2 9JT


______________________________________________
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.