Thanks for both, tapply seems to be a fast and delicate solution. I had appr. 150 000 rows and it took few seconds to get the result. Till now I have been too tied by for-loops. I will make acquaintance with "An Introduction to R".
Atte ----- Original Message ----- From: "Richard M. Heiberger" <[EMAIL PROTECTED]> Date: Saturday, August 19, 2006 11:10 pm Subject: Re: [R] A matrix problem > > x <- cbind(index=c(1,5,2,1), contents=c(3,1,1,5)) > > x > index contents > [1,] 1 3 > [2,] 5 1 > [3,] 2 1 > [4,] 1 5 > > ## use tapply to get the values you want > > z0 <- tapply(x[,"contents"], x[,"index"], sum) ## read ?tapply > > z0 > 1 2 5 > 8 1 1 > > ## more work is needed to get them into the structure you want > > r <- range(x[,"index"]) > > r > [1] 1 5 > > nn <- seq(r[1], r[2]) > > nn > [1] 1 2 3 4 5 > > z <- nn*0 > > z > [1] 0 0 0 0 0 > > names(z) <- nn > > z > 1 2 3 4 5 > 0 0 0 0 0 > > z[names(z0)] <- z0 ## read about subscripting ?"[" > > z > 1 2 3 4 5 > 8 1 0 0 1 > > > > > ## R is a matrix and vector language. Loops are rarely needed. > ## Read "An Introduction to R". > ## It is clickable from the Help menu in the Windows RGui Console. > ## It is available in R-2.3.1/doc/manual/R-intro.pdf on all platforms. > > > > This is essentially the same as jim holtman's answer. I did some > extra work > to get nice names on the result vector. > ______________________________________________ [email protected] 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.
