counting matched elements in two vectors

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

counting matched elements in two vectors

M.Bezabih
   Hi all,
I have the following reproducible example

z<-c(-5:40)
w<-c(11, 11, 12, 14, 14, 14, 15, 16, 18, 25, 26, 26, 26, 27, 27, 30)
 r<-z %in% w

now r gives me the presence or absence of elements in z that are in w but I am interested in getting the number of times each element in z appears (or doesn't appear)  in w. I want the dimension of my resulting vector to be the same as that of z. How do I do that?

 Thanks in advance
 Mintewab


Please access the attached hyperlink for an important electronic communications disclaimer: http://lse.ac.uk/emailDisclaimer
        [[alternative HTML version deleted]]

______________________________________________
[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
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: counting matched elements in two vectors

Jeff Newmiller
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:<[hidden email]>        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.

[hidden email] wrote:

>   Hi all,
>I have the following reproducible example
>
>z<-c(-5:40)
>w<-c(11, 11, 12, 14, 14, 14, 15, 16, 18, 25, 26, 26, 26, 27, 27, 30)
> r<-z %in% w
>
>now r gives me the presence or absence of elements in z that are in w
>but I am interested in getting the number of times each element in z
>appears (or doesn't appear)  in w. I want the dimension of my resulting
>vector to be the same as that of z. How do I do that?
>
> Thanks in advance
> Mintewab
>
>
>Please access the attached hyperlink for an important electronic
>communications disclaimer: http://lse.ac.uk/emailDisclaimer
> [[alternative HTML version deleted]]
>
>______________________________________________
>[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
>and provide commented, minimal, self-contained, reproducible code.

______________________________________________
[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
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: counting matched elements in two vectors

Hervé Pagès
In reply to this post by M.Bezabih
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, [hidden email] wrote:

>     Hi all,
> I have the following reproducible example
>
> z<-c(-5:40)
> w<-c(11, 11, 12, 14, 14, 14, 15, 16, 18, 25, 26, 26, 26, 27, 27, 30)
>   r<-z %in% w
>
> now r gives me the presence or absence of elements in z that are in w but I am interested in getting the number of times each element in z appears (or doesn't appear)  in w. I want the dimension of my resulting vector to be the same as that of z. How do I do that?
>
>   Thanks in advance
>   Mintewab
>
>
> Please access the attached hyperlink for an important electronic communications disclaimer: http://lse.ac.uk/emailDisclaimer
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [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
> and provide commented, minimal, self-contained, reproducible code.
>

--
Hervé Pagès

Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024

E-mail: [hidden email]
Phone:  (206) 667-5791
Fax:    (206) 667-1319

______________________________________________
[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
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: counting matched elements in two vectors

plangfelder
In reply to this post by M.Bezabih
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,  <[hidden email]> wrote:

>    Hi all,
> I have the following reproducible example
>
> z<-c(-5:40)
> w<-c(11, 11, 12, 14, 14, 14, 15, 16, 18, 25, 26, 26, 26, 27, 27, 30)
>  r<-z %in% w
>
> now r gives me the presence or absence of elements in z that are in w but I am interested in getting the number of times each element in z appears (or doesn't appear)  in w. I want the dimension of my resulting vector to be the same as that of z. How do I do that?
>
>  Thanks in advance
>  Mintewab
>
>
> Please access the attached hyperlink for an important electronic communications disclaimer: http://lse.ac.uk/emailDisclaimer
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> [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
> and provide commented, minimal, self-contained, reproducible code.

______________________________________________
[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
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: counting matched elements in two vectors

Hervé Pagès
In reply to this post by Hervé Pagès
On 01/23/2014 04:49 PM, Hervé Pagès 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

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.

>
> To install the IRanges package:
>
>    source("http://bioconductor.org/biocLite.R")
>    biocLite("IRanges")
>
> Cheers,
> H.
>
>
> On 01/23/2014 07:43 AM, [hidden email] wrote:
>>     Hi all,
>> I have the following reproducible example
>>
>> z<-c(-5:40)
>> w<-c(11, 11, 12, 14, 14, 14, 15, 16, 18, 25, 26, 26, 26, 27, 27, 30)
>>   r<-z %in% w
>>
>> now r gives me the presence or absence of elements in z that are in w
>> but I am interested in getting the number of times each element in z
>> appears (or doesn't appear)  in w. I want the dimension of my
>> resulting vector to be the same as that of z. How do I do that?
>>
>>   Thanks in advance
>>   Mintewab
>>
>>
>> Please access the attached hyperlink for an important electronic
>> communications disclaimer: http://lse.ac.uk/emailDisclaimer
>>     [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> [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
>> and provide commented, minimal, self-contained, reproducible code.
>>
>

--
Hervé Pagès

Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024

E-mail: [hidden email]
Phone:  (206) 667-5791
Fax:    (206) 667-1319

______________________________________________
[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
and provide commented, minimal, self-contained, reproducible code.