# 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.

Reply via email to