Hello again, Ley say I have 1 matrix and 1 data frame:> mat <- matrix(1:15, 5) > match_df <- data.frame(Seq = 1:5, criteria = sample(letters[1:5], 5, replace = T)) > mat[,1] [,2] [,3] [1,] 1 6 11 [2,] 2 7 12 [3,] 3 8 13 [4,] 4 9 14 [5,] 5 10 15> match_dfSeq criteria 1 1 c 2 2 e 3 3 c 4 4 c 5 5 d Now I want to get the column-sums of 'mat' based on the unique elements of match_df[,'criteria'] Therefore based on the 'match_df', my resulting matrix will have 3 rows (because the unique elements here are 'c, e, & d'). And......... 1st row will be column sums for mat[c(1,3,4), ] 2nd row will be column sums for mat[c(2), ] 3rd row will be column sums for mat[c(5), ] I want to get a general framework, so that I can implement that in some big arbitrary matrix. Can somebody give me some pointer? Thanks and regards,
Hello, Something like this? do.call(rbind, lapply(split(as.data.frame(mat), match_df$criteria), colSums)) Hope this helps, Rui Barradas Em 24-01-2013 19:39, Christofer Bogaso escreveu:> Hello again, > > Ley say I have 1 matrix and 1 data frame: > >> mat <- matrix(1:15, 5) >> match_df <- data.frame(Seq = 1:5, criteria = sample(letters[1:5], 5, replace = T)) >> mat > [,1] [,2] [,3] > [1,] 1 6 11 > [2,] 2 7 12 > [3,] 3 8 13 > [4,] 4 9 14 > [5,] 5 10 15 >> match_df > Seq criteria > 1 1 c > 2 2 e > 3 3 c > 4 4 c > 5 5 d > > Now I want to get the column-sums of 'mat' based on the unique > elements of match_df[,'criteria'] > > Therefore based on the 'match_df', my resulting matrix will have 3 > rows (because the unique elements here are 'c, e, & d'). And......... > > 1st row will be column sums for mat[c(1,3,4), ] > 2nd row will be column sums for mat[c(2), ] > 3rd row will be column sums for mat[c(5), ] > > I want to get a general framework, so that I can implement that in > some big arbitrary matrix. > > Can somebody give me some pointer? > > Thanks and regards, > > ______________________________________________ > 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. >
Hi, You could also use: mat <- matrix(1:15, 5) set.seed(5) match_df <- data.frame(Seq = 1:5, criteria = sample(letters[1:5], 5, replace = T),stringsAsFactors=F) library(plyr) res<-daply(as.data.frame(mat),.(match_df$criteria),colSums) res ???????????????? #match_df$criteria V1 V2 V3 ? # ???????????? a? 5 10 15 ?? # ??????????? b? 5 15 25 ??? # ?????????? d? 2? 7 12 ????? # ???????? e? 3? 8 13 A.K. ----- Original Message ----- From: Christofer Bogaso <bogaso.christofer at gmail.com> To: r-help <r-help at r-project.org> Cc: Sent: Thursday, January 24, 2013 2:39 PM Subject: [R] Question on matrix calculation Hello again, Ley say I have 1 matrix and 1 data frame:> mat <- matrix(1:15, 5) > match_df <- data.frame(Seq = 1:5, criteria = sample(letters[1:5], 5, replace = T)) > mat? ? [,1] [,2] [,3] [1,]? ? 1? ? 6? 11 [2,]? ? 2? ? 7? 12 [3,]? ? 3? ? 8? 13 [4,]? ? 4? ? 9? 14 [5,]? ? 5? 10? 15> match_df? Seq criteria 1? 1? ? ? ? c 2? 2? ? ? ? e 3? 3? ? ? ? c 4? 4? ? ? ? c 5? 5? ? ? ? d Now I want to get the column-sums of 'mat' based on the unique elements of match_df[,'criteria'] Therefore based on the 'match_df', my resulting matrix will have 3 rows (because the unique elements here are 'c, e, & d'). And......... 1st row will be column sums for mat[c(1,3,4), ] 2nd row will be column sums for mat[c(2), ] 3rd row will be column sums for mat[c(5), ] I want to get a general framework, so that I can implement that in some big arbitrary matrix. Can somebody give me some pointer? Thanks and regards, ______________________________________________ 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.