Does anyone know if there is an R function that will take a matrix like this jim 1 0 0 0 0 0 jim 0 1 0 0 0 0 jim 0 0 1 0 0 0 bob 1 0 0 0 0 0 bob 0 0 1 0 0 0 harry 0 0 1 0 0 0 harry 0 0 0 1 0 0 harry 0 0 0 0 1 0 harry 0 0 0 0 0 1 and make it like this? (that is, add together rows that have the same name?) jim 1 1 1 0 0 0 bob 1 0 1 0 0 0 harry 0 0 1 1 1 1 here's the code I started with, if it helps library (dummies) a <- c(1,1,1,2,2,3,3,3,3) b<- c("A","B","C","A","C","C","D","E","F") name<- c("jim", "jim", "jim", "bob", "bob", "harry", "harry", "harry", "harry") MyMat <- cbind (a, b) rownames (MyMat) <- name dum.mat.temp <- dummy ("b", MyMat) #dum.mat.temp <-cbind (name, dum.mat.temp) # if you want names as a column dum.mat.temp Many thanks in advance! --Sarah
Henrique Dallazuanna
2010-Mar-23 21:24 UTC
[R] Adding matrix rows that have the same name?
Try this: aggregate(as.data.frame(dum.mat.temp), list(row.names(dum.mat.temp)), sum) On Tue, Mar 23, 2010 at 6:15 PM, Sarah Berke <skberke at gmail.com> wrote:> Does anyone know if there is an R function that will take a matrix like this > > jim ? ? 1 ?0 ?0 ?0 ?0 ?0 > jim ? ? 0 ?1 ?0 ?0 ?0 ?0 > jim ? ? 0 ?0 ?1 ?0 ?0 ?0 > bob ? ?1 ?0 ?0 ?0 ?0 ?0 > bob ? ?0 ?0 ?1 ?0 ?0 ?0 > harry ?0 ?0 ?1 ?0 ?0 ?0 > harry ?0 ?0 ?0 ?1 ?0 ?0 > harry ?0 ?0 ?0 ?0 ?1 ?0 > harry ?0 ?0 ?0 ?0 ?0 ?1 > > and make it like this? (that is, add together rows that have the same name?) > > jim ? ?1 1 1 0 0 0 > bob ? 1 0 1 0 0 0 > harry 0 0 1 1 1 1 > > > here's the code I started with, if it helps > > library (dummies) > a <- c(1,1,1,2,2,3,3,3,3) > b<- c("A","B","C","A","C","C","D","E","F") > name<- c("jim", "jim", "jim", "bob", "bob", "harry", "harry", "harry", "harry") > MyMat <- cbind (a, b) > rownames (MyMat) <- name > dum.mat.temp <- dummy ("b", MyMat) > ? ? ? #dum.mat.temp <-cbind (name, dum.mat.temp) # if you want names > as a column > dum.mat.temp > > Many thanks in advance! > --Sarah > > ______________________________________________ > 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. >-- Henrique Dallazuanna Curitiba-Paran?-Brasil 25? 25' 40" S 49? 16' 22" O
Hi: The plyr solution is as follows, where your 'matrix' is a data frame m whose first column is a factor:> mV1 V2 V3 V4 V5 V6 V7 1 jim 1 0 0 0 0 0 2 jim 0 1 0 0 0 0 3 jim 0 0 1 0 0 0 4 bob 1 0 0 0 0 0 5 bob 0 0 1 0 0 0 6 harry 0 0 1 0 0 0 7 harry 0 0 0 1 0 0 8 harry 0 0 0 0 1 0 9 harry 0 0 0 0 0 1> str(m)'data.frame': 9 obs. of 7 variables: $ V1: Factor w/ 3 levels "bob","harry",..: 3 3 3 1 1 2 2 2 2 $ V2: int 1 0 0 1 0 0 0 0 0 <V3 through V7 are also numeric> library(plyr) ddply(m, "V1", numcolwise(sum)) V1 V2 V3 V4 V5 V6 V7 1 bob 1 0 1 0 0 0 2 harry 0 0 1 1 1 1 3 jim 1 1 1 0 0 0 ddply() takes a data frame as input and outputs a data frame. "V1" specifies the (categorical) variable over which reductions are desired, and numcolwise(fun) applies the function supplied as its argument to all numeric columns. HTH, Dennis On Tue, Mar 23, 2010 at 2:15 PM, Sarah Berke <skberke@gmail.com> wrote:> Does anyone know if there is an R function that will take a matrix like > this > > jim 1 0 0 0 0 0 > jim 0 1 0 0 0 0 > jim 0 0 1 0 0 0 > bob 1 0 0 0 0 0 > bob 0 0 1 0 0 0 > harry 0 0 1 0 0 0 > harry 0 0 0 1 0 0 > harry 0 0 0 0 1 0 > harry 0 0 0 0 0 1 > > and make it like this? (that is, add together rows that have the same > name?) > > jim 1 1 1 0 0 0 > bob 1 0 1 0 0 0 > harry 0 0 1 1 1 1 > > > here's the code I started with, if it helps > > library (dummies) > a <- c(1,1,1,2,2,3,3,3,3) > b<- c("A","B","C","A","C","C","D","E","F") > name<- c("jim", "jim", "jim", "bob", "bob", "harry", "harry", "harry", > "harry") > MyMat <- cbind (a, b) > rownames (MyMat) <- name > dum.mat.temp <- dummy ("b", MyMat) > #dum.mat.temp <-cbind (name, dum.mat.temp) # if you want names > as a column > dum.mat.temp > > Many thanks in advance! > --Sarah > > ______________________________________________ > 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. >[[alternative HTML version deleted]]