Try this also: rowsum(`mode<-`(!is.na(m[,-(1:2)]), 'numeric'), m[,2])
On Wed, Jun 9, 2010 at 10:03 PM, steven mosher <mosherste...@gmail.com>wrote: > # create a matrix with some random NAs in it > > m<-matrix(NA,nrow=15,ncol=14) > > m[,3:14]<-52 > > m[13,9]<-NA > > m[4:7,8]<-NA > > m[1:2,5]<-NA > > m[,2]<-rep(1800:1804, by=3) > > y<-order(m[,2]) > > m<-m[y,] > > m[,1]<-rep(1:3,by=5) > > m > [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] > [,14] > [1,] 1 1800 52 52 NA 52 52 52 52 52 52 52 52 > 52 > [2,] 2 1800 52 52 52 52 52 NA 52 52 52 52 52 > 52 > [3,] 3 1800 52 52 52 52 52 52 52 52 52 52 52 > 52 > [4,] 1 1801 52 52 NA 52 52 52 52 52 52 52 52 > 52 > [5,] 2 1801 52 52 52 52 52 NA 52 52 52 52 52 > 52 > [6,] 3 1801 52 52 52 52 52 52 52 52 52 52 52 > 52 > [7,] 1 1802 52 52 52 52 52 52 52 52 52 52 52 > 52 > [8,] 2 1802 52 52 52 52 52 52 52 52 52 52 52 > 52 > [9,] 3 1802 52 52 52 52 52 52 NA 52 52 52 52 > 52 > [10,] 1 1803 52 52 52 52 52 NA 52 52 52 52 52 > 52 > [11,] 2 1803 52 52 52 52 52 52 52 52 52 52 52 > 52 > [12,] 3 1803 52 52 52 52 52 52 52 52 52 52 52 > 52 > [13,] 1 1804 52 52 52 52 52 NA 52 52 52 52 52 > 52 > [14,] 2 1804 52 52 52 52 52 52 52 52 52 52 52 > 52 > [15,] 3 1804 52 52 52 52 52 52 52 52 52 52 52 > 52 > > # the goal is to count all NON NA by changes in column 2 > # we can get the count for all rows easily. > > col.sum<-(apply(!is.na(m[,3:14]),2,sum)) > > col.sum > [1] 15 15 13 15 15 11 14 15 15 15 15 15 > > # what we want is a result that looks like this > 1800 3 3 2 3 3 2 3 3 3 3 3 3 > 1801 3 3 2 3 3 2 3 3 3 3 3 3 > 1802 3 3 3 3 3 3 2 3 3 3 3 3 > 1803 3 3 3 3 3 2 3 3 3 3 3 3 > 1804 3 3 3 3 3 2 3 3 3 3 3 3 > > I've toyed a bit with By > > > mask<-!is.na(m[,3:14]) > > test<-cbind(m[,1:2],mask) > > test > [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] > [,14] > [1,] 1 1800 1 1 0 1 1 1 1 1 1 1 1 > 1 > [2,] 2 1800 1 1 1 1 1 0 1 1 1 1 1 > 1 > [3,] 3 1800 1 1 1 1 1 1 1 1 1 1 1 > 1 > [4,] 1 1801 1 1 0 1 1 1 1 1 1 1 1 > 1 > [5,] 2 1801 1 1 1 1 1 0 1 1 1 1 1 > 1 > [6,] 3 1801 1 1 1 1 1 1 1 1 1 1 1 > 1 > [7,] 1 1802 1 1 1 1 1 1 1 1 1 1 1 > 1 > [8,] 2 1802 1 1 1 1 1 1 1 1 1 1 1 > 1 > [9,] 3 1802 1 1 1 1 1 1 0 1 1 1 1 > 1 > [10,] 1 1803 1 1 1 1 1 0 1 1 1 1 1 > 1 > [11,] 2 1803 1 1 1 1 1 1 1 1 1 1 1 > 1 > [12,] 3 1803 1 1 1 1 1 1 1 1 1 1 1 > 1 > [13,] 1 1804 1 1 1 1 1 0 1 1 1 1 1 > 1 > [14,] 2 1804 1 1 1 1 1 1 1 1 1 1 1 > 1 > [15,] 3 1804 1 1 1 1 1 1 1 1 1 1 1 > 1 > > > result<-by(test[,3:14],test[,2], sum) > > result > INDICES: 1800 > [1] 34 > > --------------------------------------------------------------------------------------------------------- > INDICES: 1801 > [1] 34 > > --------------------------------------------------------------------------------------------------------- > INDICES: 1802 > [1] 35 > > --------------------------------------------------------------------------------------------------------- > INDICES: 1803 > [1] 35 > > --------------------------------------------------------------------------------------------------------- > INDICES: 1804 > [1] 35 > > > as this sums all the values and not by column. it's wrong > so is there an elegant way to get the number of > NON Nas.. by column governed by changes in the values of a variable. > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. > -- Henrique Dallazuanna Curitiba-Paraná-Brasil 25° 25' 40" S 49° 16' 22" O [[alternative HTML version deleted]]
______________________________________________ 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.