indexing via a character matrix?

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

indexing via a character matrix?

Roger Levy
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
character tuples out of a contingency table without resorting to writing
loops?

Many thanks,

Roger Levy

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Reply | Threaded
Open this post in threaded view
|

Re: indexing via a character matrix?

Prof Brian Ripley
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.

--
Brian D. Ripley,                  [hidden email]
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

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Reply | Threaded
Open this post in threaded view
|

Re: indexing via a character matrix?

Roger Levy
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?

Many thanks,

Roger

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Reply | Threaded
Open this post in threaded view
|

Re: indexing via a character matrix?

Prof Brian Ripley
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,                  [hidden email]
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

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html