I need help regarding to the following problem: Consider this matrix:> M <- matrix(c(1,2, 4,3, 1, 2),3, 2, byrow=TRUE) > M[,1] [,2] [1,] 1 2 [2,] 4 3 [3,] 1 2 I would like to have a matrix which counts the identical rows and places the counts into its third column. I tried with ftable():> as.data.frame(ftable(M[,1], M[,2]))Var1 Var2 Freq 1 1 2 2 2 4 2 0 3 1 3 0 4 4 3 1 This would be exactly what I want without the 0-freq rows. The problem is that ftable() counts the occurances of all possible factor combinations, which is inproper because the real matrix is very long for which I want to count. (I know that I could filter out 0-frequencies afterwards but I would like ftable not to produce 0-frequencies unnecessarily (it would consume too much space)). I tried table() too, but I couldn't tell it that it should consider each row as one data point, and not all elements in the matrix separately:> as.data.frame(table(M))M Freq 1 1 2 2 2 2 3 3 1 4 4 1 Any help greatly appreciated! Balazs Torma
Dimitris Rizopoulos
2007-Jul-13 14:45 UTC
[R] counting occurances of matching rows in a matrix
one way is the following (maybe there're better): pats <- do.call(paste, c(as.data.frame(M), sep = "\r")) pats <- factor(pats, levels = unique(pats)) cbind(unique(M), Freq = as.vector(table(pats))) I hope it helps. Best, Dimitris ---- Dimitris Rizopoulos Ph.D. Student Biostatistical Centre School of Public Health Catholic University of Leuven Address: Kapucijnenvoer 35, Leuven, Belgium Tel: +32/(0)16/336899 Fax: +32/(0)16/337015 Web: http://med.kuleuven.be/biostat/ http://www.student.kuleuven.be/~m0390867/dimitris.htm ----- Original Message ----- From: "Balazs Torma" <torma at ilab.sztaki.hu> To: <r-help at stat.math.ethz.ch> Sent: Friday, July 13, 2007 4:11 PM Subject: [R] counting occurances of matching rows in a matrix>I need help regarding to the following problem: > > Consider this matrix: > >> M <- matrix(c(1,2, 4,3, 1, 2),3, 2, byrow=TRUE) >> M > [,1] [,2] > [1,] 1 2 > [2,] 4 3 > [3,] 1 2 > > I would like to have a matrix which counts the identical rows and > places the counts into its third column. I tried with ftable(): > >> as.data.frame(ftable(M[,1], M[,2])) > Var1 Var2 Freq > 1 1 2 2 > 2 4 2 0 > 3 1 3 0 > 4 4 3 1 > > This would be exactly what I want without the 0-freq rows. The > problem is that ftable() counts the occurances of all possible > factor combinations, which is inproper because the real matrix is > very long for which I want to count. (I know that I could filter out > 0-frequencies afterwards but I would like ftable not to produce > 0-frequencies unnecessarily (it would consume too much space)). > > I tried table() too, but I couldn't tell it that it should consider > each row as one data point, and not all elements in the matrix > separately: > >> as.data.frame(table(M)) > M Freq > 1 1 2 > 2 2 2 > 3 3 1 > 4 4 1 > > Any help greatly appreciated! > Balazs Torma > > ______________________________________________ > R-help at stat.math.ethz.ch 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. >Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm