On Apr 23, 2011, at 9:34 AM, David Winsemius wrote:
On Apr 23, 2011, at 6:31 AM, <xu...@pdx.edu> wrote:
Hi all,
I am trying to write a loop to return the matched index for a
column of values. Here is an simple example of this,
A B
0 5
1 2
2 2
3 4
4 1
5 4
6 2
In this case, A is an index column for B. Now I have this new
column C with just two values of 2 and 4. I want to match column C
with column B, and return the matched indexes. So what I desire is
to return:
[1] 1 2 6
[2] 3 5
Since value 2 corresponds to indexes 1,2,6, and 4 corresponds to
indexes 3,5.
Assuming this to be in a data.frame named dat:
> dat$A[which(dat$B==2) ]
[1] 1 2 6
I've been reminded that in many instances one gets comparable results
with dat$A[ dat$B==2 ] (logical indexing).
The reason I choose to use which() is that it returns a numeric vector
and leaves out any NA's that result from dat$B==2. the "[" function
returns all logical NA rows. It may be important to return such NA's
to alert the analyst to their presence. (This does result in extensive/
useless/unexpected screen output when large datasets with even a small
faction of NA's are being manipulated.)
--
David
> dat$A[which(dat$B==4) ]
[1] 3 5
Results of varying lengths generally need to be returned in list form:
> sapply(c(2,4), function(x) dat$A[which(dat$B==x) ] )
[[1]]
[1] 1 2 6
[[2]]
[1] 3 5
David Winsemius, MD
West Hartford, CT
______________________________________________
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.