[R] Sum over indexed value
cls59
chuck at sharpsteen.net
Mon Nov 16 20:39:35 CET 2009
Gunadi wrote:
>
> I am sure this is easy but I am not finding a function to do this.
>
> I have two columns in a matrix. The first column contains multiple entries
> of numbers from 1 to 100 (i.e. 10 ones, 8 twos etc.). The second column
> contains unique numbers. I want to sum the numbers in column two based on
> the indexed values in column one (e.g. sum of all values in column two
> associated with the value 1 in column one). I would like two columns in
> return - the indexed value in column one (i.e. this time no duplicates)
> and the sum in column two.
>
> How do I do this?
>
Supposing you had the data:
tstData <- data.frame( index = c(1,2,1,1,3,2),
value = c( 0, 4, 0, 0, 7, 4 ) )
You could use the by() function to divide the data.frame and sum the value
column:
sums <- by( tstData, tstData[['index']], function( slice ){
return( sum( slice[['value']] ) )
})
However, by() tends to do a poor job of cleanly expressing which values of
'index' generated the sums. I would recomend the __ply() functions in
Hadley Wickham's plyr package. Specifically ddply():
require( plyr )
sums <- ddply( tstData, 'index', function( slice ){
return(
data.frame( sum = sum( slice[['value']] ) )
)
})
sums
index sum
1 1 0
2 2 8
3 3 7
Hope this helps!
-Charlie
-----
Charlie Sharpsteen
Undergraduate
Environmental Resources Engineering
Humboldt State University
--
View this message in context: http://old.nabble.com/Sum-over-indexed-value-tp26376359p26378112.html
Sent from the R help mailing list archive at Nabble.com.
More information about the R-help
mailing list