Re: [R] indexing via a character matrix?

From: Prof Brian Ripley <ripley_at_stats.ox.ac.uk>
Date: Tue 14 Feb 2006 - 19:58:38 EST

On Mon, 13 Feb 2006, Roger Levy wrote:

> Prof Brian Ripley wrote:
>> On Mon, 13 Feb 2006, Roger Levy wrote:
>>
>>> Hi,
>>>
>>> Is it possible to index via a character matrix? For example, I would
>>> like to do the following:
>>>
>>> cont.table <- table(df1$A,df1$B) # df1 a data frame with factors A and B
>>> cont.table[cbind(df2$A,df2$B)] # df2 a smaller data frame with some
>>> # pairings of values for A and B
>>>
>>> but the second step does not work -- I guess that matrices to be used
>>> for indexing this way must be numeric. Is there a way to index multiple
>>
>> Numeric or logical.
>>
>>> character tuples out of a contingency table without resorting to writing
>>> loops?
>>
>> What are you trying to do here? One possibility is that you meant
>>
>> comt.table[df2$A, df2$B]
>>
>> and another is
>>
>> ind1 <- match(df2$A, df1$A)
>> ind2 <- match(df2$B, df1$B)
>> cont.table[cbind(ind1, ind2)]
>>
>> and I am not certain which.
>>
>
> Hmm, I think neither one is what I wanted. After thinking more about it, I
> think what I would need is
>
> ind1 <- match(df2$A,levels(df1$A))
> ind2 <- match(df2$B,levels(df2$B))
> cont.table[cbind(ind1,ind2)]
>
> Does this make sense? Is there a more natural way to express this?

Not really.

You said character, but you seem to have a factor (by the use of levels). It is the case that cont.table will have dims indexed by the levels of df1$A and df1$B, so perhaps you want

ind1 <- match(df2$A,levels(df1$A))
ind2 <- match(df2$B,levels(df1$B))
cont.table[cbind(ind1,ind2)]

That gives you a vector along rows of df2 giving the count of that A,B combination in df1 (provide all such occur). If some might not occur, use matchdf2$A,levels(df1$A), NA) etc.

-- 
Brian D. Ripley,                  ripley@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Received on Tue Feb 14 20:07:16 2006

This archive was generated by hypermail 2.1.8 : Wed 15 Feb 2006 - 13:38:47 EST