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]]

______________________________________________
[email protected] 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

______________________________________________
[email protected] 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