[R] using sapply to apply function to some columns of a dataframe

Duncan Murdoch murdoch at stats.uwo.ca
Tue Feb 17 23:13:25 CET 2009


On 17/02/2009 4:42 PM, mwestphal at worldbank.org wrote:
> Hello:
> 
> I would like to sum every x columns of a dataframe for each row.  For instance,
> if x is 10, then for dataframe df, this function will sum the first ten elements
> together and then the next ten:
> 
> sapply(list(colnames(df)[1:10], colnames(df)[11:20]),function(x)apply( df[,x],
> 1, sum))
> 
> If the number of columns is quite large (1000's), then manually entering the
> list above is not practical.  Any suggestions?
> 
> I would also like to do a variant of the above, where I sum every nth element.

I think the easiest way to do this is to convert the dataframe into an 
array with 3 indices, and sum over one of them.  For example:

rows <- 20
cols <- 120

df <- matrix(1:(rows*cols), rows, cols)
# in your case, df <- as.matrix( df )

arr <- array( df, c(rows, 10, cols/10))
sums <- apply( arr, c(1,3), sum)

Duncan Murdoch




More information about the R-help mailing list