Hi all, I have 2 columns in a mtrix, one of which is a column of probabilities and the other is simply a vector of integers. I want to sum all the probabilities with the same integer value and put it in a new column. For example, If my matrix is: 0.98 2 0.2 1 0.01 2 0.5 1 0.6 6 Then I should get: 0.98 2 0.99 0.2 1 0.70 0.01 2 0.99 0.5 1 0.70 0.6 6 0.60 Any help is greatly appreciated. -- Thanks, Jim. [[alternative HTML version deleted]]
Let's make it a data frame instead: # Read the data from your post into a data frame named d: d <- read.table(textConnection(" 0.98 2 0.2 1 0.01 2 0.5 1 0.6 6")) closeAllConnections() # Use the ave() function and append the result to d: d$sumprob <- with(d, ave(V1, V2, FUN = sum))> dV1 V2 sumprob 1 0.98 2 0.99 2 0.20 1 0.70 3 0.01 2 0.99 4 0.50 1 0.70 5 0.60 6 0.60 HTH, Dennis On Sat, Oct 1, 2011 at 6:06 PM, Jim Silverton <jim.silverton at gmail.com> wrote:> Hi all, > I have 2 columns in a mtrix, one of which is a column of probabilities and > the other is simply a vector of integers. I want to sum all the > probabilities with the same integer value and put it in a new column. > For example, > If my matrix is: > > 0.98 ? 2 > 0.2 ? ? 1 > 0.01 ? 2 > 0.5 ? ? 1 > 0.6 ? ? 6 > > > Then I should get: > 0.98 ? 2 ? ?0.99 > 0.2 ? ? 1 ? ?0.70 > 0.01 ? 2 ? ?0.99 > 0.5 ? ? 1 ? ?0.70 > 0.6 ? ? 6 ? ?0.60 > > Any help is greatly appreciated. > > > > -- > Thanks, > Jim. > > ? ? ? ?[[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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. >
On 02/10/11 14:06, Jim Silverton wrote:> Hi all, > I have 2 columns in a mtrix, one of which is a column of probabilities and > the other is simply a vector of integers. I want to sum all the > probabilities with the same integer value and put it in a new column. > For example, > If my matrix is: > > 0.98 2 > 0.2 1 > 0.01 2 > 0.5 1 > 0.6 6 > > > Then I should get: > 0.98 2 0.99 > 0.2 1 0.70 > 0.01 2 0.99 > 0.5 1 0.70 > 0.6 6 0.60 > > Any help is greatly appreciated.Suppose your matrix is called "m". Execute: > ttt <- tapply(m[,1],m[,2],sum) > m <- cbind(m,ttt[match(m[,2],names(ttt))]) > dimnames(m) <- NULL # To tidy up a bit. You get: > m [,1] [,2] [,3] [1,] 0.98 2 0.99 [2,] 0.20 1 0.70 [3,] 0.01 2 0.99 [4,] 0.50 1 0.70 [5,] 0.60 6 0.60 Easy-peasy. cheers, Rolf Turner