on 07/23/2008 09:03 AM Shubha Vishwanath Karanth wrote:
Hi R,

Let,

x=1:80

I want to sum up first 8 elements of x, then again next 8 elements of x,
then again another 8 elements..... So, my new vector should look like:
c(36,100,164,228,292,356,420,484,548,612)

I used:

aggregate(x,list(rep(1:10,each=8)),sum)[-1]

or

rowsum(x,group=rep(1:10,each=8))

But without grouping, can I achieve the required? Any other ways of
doing this?

Thanks, Shubha


x <- 1:80

> colSums(matrix(x, ncol = 10))
 [1]  36 100 164 228 292 356 420 484 548 612

If the original vector 'x' can be coerced to a rectangular matrix, you can create the matrix such that each column is a group:

> matrix(x, ncol = 10)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    1    9   17   25   33   41   49   57   65    73
[2,]    2   10   18   26   34   42   50   58   66    74
[3,]    3   11   19   27   35   43   51   59   67    75
[4,]    4   12   20   28   36   44   52   60   68    76
[5,]    5   13   21   29   37   45   53   61   69    77
[6,]    6   14   22   30   38   46   54   62   70    78
[7,]    7   15   23   31   39   47   55   63   71    79
[8,]    8   16   24   32   40   48   56   64   72    80


Then just get the sums of each column. Note that by default, the matrix is formed by columns. This can be adjusted using the 'byrow' argument to matrix(). See ?matrix

HTH,

Marc Schwartz

______________________________________________
R-help@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.

Reply via email to