Skip to content

counting matched elements in two vectors

5 messages · M.Bezabih at lse.ac.uk, Jeff Newmiller, Peter Langfelder +1 more

#
Thank you for the reproducible example, but your description is missing a clear definition of what you want.

For example, if your desired output is 
result <- c(rep(0,16),2,1,0,3,1,1,0,1,0,0,0,0,0,0,1,3,2,0,0,1,rep(0,10))

then one answer might be

as.vector(table(factor(w,levels=z)))

---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                      Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
--------------------------------------------------------------------------- 
Sent from my phone. Please excuse my brevity.
M.Bezabih at lse.ac.uk wrote:
#
Hi Mintewab,

With the IRanges packages (from Bioconductor):

   > library(IRanges)
   > countMatches(z, w)
    [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 3 1 1 0 1 0 0 0 0 0 0 1 3 
2 0 0 1 0 0
   [39] 0 0 0 0 0 0 0 0

To install the IRanges package:

   source("http://bioconductor.org/biocLite.R")
   biocLite("IRanges")

Cheers,
H.
On 01/23/2014 07:43 AM, M.Bezabih at lse.ac.uk wrote:

  
    
#
Here's a solution:

# This gives a vector of counts (if z is a data frame, first convert
it to a matrix)
res = sapply(as.vector(z), function(x) sum(w==x))
# This copies the dimensions of the variable 'z' to 'res':
dim(res) = dim(z)

Peter
On Thu, Jan 23, 2014 at 7:43 AM, <M.Bezabih at lse.ac.uk> wrote:
#
On 01/23/2014 04:49 PM, Herv? Pag?s wrote:
And if you don't want to depend on IRanges for such a simple operation,
here how countMatches() is implemented:

   countMatches <- function(x, table)
   {
       table2 <- match(table, x)
       x2 <- match(x, x)
       tabulate(table2, nbins=length(x))[x2]
   }

Cheers,
H.