[R] counting row repetitions without loop

Doran, Harold HDoran at air.org
Wed Feb 6 15:55:52 CET 2008


I think this does what you want, but there may be a more efficient way

x  y
4  5
6  7
6  6
7  5
5  7
6  7
4  5
6  7
7  6
5  6
dat <- read.table('clipboard', header=TRUE) # copy sample data above
dat$patt <- paste(dat$x,dat$y, sep='')
mm <- as.data.frame(with(dat, table(patt)))
dat <- merge(dat, mm, by='patt')
mat <- matrix(0, ncol=10, nrow=10)
gg <- matrix(c(dat$x, dat$y), ncol=2)
mat[gg] <- dat$Freq 

> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of Waterman, 
> DG (David)
> Sent: Wednesday, February 06, 2008 9:08 AM
> To: r-help at r-project.org
> Subject: [R] counting row repetitions without loop
> 
> Hi,
>  
> I have a data frame consisting of coordinates on a 10*10 grid, i.e.
>  
> > example
>     x  y
> 1   4  5
> 2   6  7
> 3   6  6
> 4   7  5
> 5   5  7
> 6   6  7
> 7   4  5
> 8   6  7
> 9   7  6
> 10  5  6
> 
> What I would like to do is return an 10*10 matrix consisting 
> of counts at each position, so in the above example I would 
> have a matrix where, for example, cell [4,5] contains 2 and 
> [6,7] contains 3. At the moment I have implemented this using 
> a for loop over the rows of the data frame, however the data 
> frames I want to process are very long so the loop takes many 
> minutes to complete. Can I do this in a more efficient way?
>  
> Cheers,
> David
> <DIV><FONT size="1" color="gray">This e-mail and any 
> attachments may contain confidential, copyright and or 
> privileged material, and are for the use of the intended 
> addressee only. If you are not the intended addressee or an 
> authorised recipient of the addressee please notify us of 
> receipt by returning the e-mail and do not use, copy, retain, 
> distribute or disclose the information in or attached to the e-mail.
> Any opinions expressed within this e-mail are those of the 
> individual and not necessarily of Diamond Light Source Ltd. 
> Diamond Light Source Ltd. cannot guarantee that this e-mail 
> or any attachments are free from viruses and we cannot accept 
> liability for any damage which you may sustain as a result of 
> software viruses which may be transmitted in or with the message.
> Diamond Light Source Limited (company no. 4375679). 
> Registered in England and Wales with its registered office at 
> Diamond House, Harwell Science and Innovation Campus, Didcot, 
> Oxfordshire, OX11 0DE, United Kingdom </FONT></DIV> 
> 
> ______________________________________________
> R-help at 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.
> 



More information about the R-help mailing list