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
indexing via a character matrix?
4 messages · Roger Levy, 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, 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
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
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