[R] indexing via a character matrix?
Prof Brian Ripley
ripley at stats.ox.ac.uk
Tue Feb 14 09:58:38 CET 2006
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 at 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
More information about the R-help
mailing list