[R] define variables from a matrix

David Winsemius dwinsemius at comcast.net
Sat Aug 13 18:34:34 CEST 2011


On Aug 12, 2011, at 7:18 PM, gallon li wrote:

> I have a following matrix and wish to define a variable based the  
> variable
>
> A=matrix(0,5,5)
> A[1,]=c(30,20,100,120,90)
> A[2,]=c(40,30,20,50,100)
> A[3,]=c(50,50,40,30,30)
> A[4,]=c(30,20,40,50,50)
> A[5,]=c(30,50,NA,NA,100)
>> A
>     [,1] [,2] [,3] [,4] [,5]
> [1,]   30   20  100  120   90
> [2,]   40   30   20   50  100
> [3,]   50   50   40   30   30
> [4,]   30   20   40   50   50
> [5,]   30   50   NA   NA  100
>
> I want to define two variables:
>
> X is the first column in each row that is equal to 20, for example,  
> for the
> first row, I need X=2; 2nd row, X=3; 3rd row, X=NA; 4th row, X=2,  
> 5th row,
> X=NA;

X <- apply(A, 1, function(x) which(x==20) )
is.na(X) <- !unlist(lapply(X, length))
X

The first command seems obvious, but the second might be a bit  
obscure. It says assign NA to any X whose length is non-zero (i.e.  
positive in the case of length).

>
> Y is then the first column in each row that is equal to 100 if  
> before this a
> 20 has been reached, for example, for the first row, Y=3; 2nd row,  
> Y=5; 3rd
> row, Y=NA, 4th row, Y=NA; 5th row, Y=NA.

Y <- apply(A, 1, function(x) which(x==20)*(which(x==20) <  
which(x==100) ) )
is.na(Y) <- !unlist(lapply(Y, length))
Y

-- 
David.

>
> the matrix may involve NA as well.
>
> How can I define these two variables quickly?
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> 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.

David Winsemius, MD
Heritage Laboratories
West Hartford, CT



More information about the R-help mailing list