Sum every nth points

I have a vector and I need to sum every n numbers and return the results. This is the way I plan on doing it currently. Any better way to do this?

v = 1:100
n = 10
sidx = seq.int(from=1, to=length(v), by=n)
eidx = c((sidx-1)[2:length(sidx)], length(v))
thesum = sapply(1:length(sidx), function(i) sum(v[sidx[i]:eidx[i]]))

This gives:

thesum
 [1]  55 155 255 355 455 555 655 755 855 955

unname(tapply(v, (seq_along(v)-1) %/% n, sum))
# [1] 55 155 255 355 455 555 655 755 855 955 

UPDATE:

If you want to sum every n consecutive numbers use colSums
If you want to sum every nth number use rowSums

as per Josh's comment, this will only work if n divides length(v) nicely.

rowSums(matrix(v, nrow=n))
 [1] 460 470 480 490 500 510 520 530 540 550

colSums(matrix(v, nrow=n))
 [1]  55 155 255 355 455 555 655 755 855 955


Update

The olde version don't work. Here a ne awnser that use rep to create the grouping factor. No need to use cut:

n <- 5 
vv <- sample(1:1000,100)
seqs <- seq_along(vv)
tapply(vv,rep(seqs,each=n)[seqs],FUN=sum)

You can use tapply

tapply(1:100,cut(1:100,10),FUN=sum)

or to get a list

by(1:100,cut(1:100,10),FUN=sum)

EDIT

In case you have 1:92, you can replace your cut by this :

cut(1:92,seq(1,92,10),include.lowest=T)

One way is to convert your vector to a matric then take the column sums:

colSums(matrix(v, nrow=n))
[1]  55 155 255 355 455 555 655 755 855 955

Just be careful: this implicitly assumes that your input vector can in fact be reshaped to a matrix. If it can't, R will recycle elements of your vector to complete the matrix.


v <- 1:100

n <- 10

cutpoints <- seq( 1 , length( v ) , by = n )

categories <- findInterval( 1:length( v ) , cutpoints )

tapply( v , categories , sum )