[R] combinations between two vectors

Chel Hee Lee chl948 at mail.usask.ca
Thu Dec 18 17:21:29 CET 2014


I like the example provided by David L. Carlson using the function 
'expand.grid()' as shown in the previous email.

You may try 'outer()' and 'upper.tri()' instead 'expand.grid()'.  Please 
see the below:

 > x <- outer(test, test, paste, sep=",")
 > x
      [,1]      [,2]         [,3]          [,4]          [,5]
[1,] "1,1"     "1,5001"     "1,10001"     "1,15001"     "1,20001"
[2,] "5001,1"  "5001,5001"  "5001,10001"  "5001,15001"  "5001,20001"
[3,] "10001,1" "10001,5001" "10001,10001" "10001,15001" "10001,20001"
[4,] "15001,1" "15001,5001" "15001,10001" "15001,15001" "15001,20001"
[5,] "20001,1" "20001,5001" "20001,10001" "20001,15001" "20001,20001"
[6,] "25001,1" "25001,5001" "25001,10001" "25001,15001" "25001,20001"
      [,6]
[1,] "1,25001"
[2,] "5001,25001"
[3,] "10001,25001"
[4,] "15001,25001"
[5,] "20001,25001"
[6,] "25001,25001"


 > x.idx <- upper.tri(x, diag=FALSE)
 > x[x.idx]
  [1] "1,5001"      "1,10001"     "5001,10001"  "1,15001"     "5001,15001"
  [6] "10001,15001" "1,20001"     "5001,20001"  "10001,20001" "15001,20001"
[11] "1,25001"     "5001,25001"  "10001,25001" "15001,25001" "20001,25001"

 > x.idx2 <- upper.tri(x, diag=TRUE)
 > x[x.idx2]
  [1] "1,1"         "1,5001"      "5001,5001"   "1,10001"     "5001,10001"
  [6] "10001,10001" "1,15001"     "5001,15001"  "10001,15001" "15001,15001"
[11] "1,20001"     "5001,20001"  "10001,20001" "15001,20001" "20001,20001"
[16] "1,25001"     "5001,25001"  "10001,25001" "15001,25001" "20001,25001"
[21] "25001,25001"
 >

I hope this helps.  Thank you, David, for your good lesson.

Chel Hee Lee, PhD.
Biostatistian and Manager
Clinical Research Support Unit
College of Medicine
University of Saskatchewan

On 12/18/2014 9:16 AM, David L Carlson wrote:
> Depending on what you want, you probably want to start with expand.grid():
>
> # All combinations of test with test
>> pairs1 <- expand.grid(test, test)
>> nrow(pairs1)
> [1] 36
> # Exclude cases that differ only in the order of the values
> # E.g. (1, 5001), but not (5001, 1), also (1, 1), etc are included
>> pairs2 <- pairs1[pairs1[,1] <= pairs1[,2],]
>> nrow(pairs2)
> [1] 21
> # Same as pairs2 but (1, 1), etc are not included
>> pairs3 <- pairs1[pairs1[,1] < pairs1[,2],]
>> nrow(pairs3)
> [1] 15
>
> -------------------------------------
> David L Carlson
> Department of Anthropology
> Texas A&M University
> College Station, TX 77840-4352
>
> -----Original Message-----
> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Sarah Goslee
> Sent: Thursday, December 18, 2014 9:06 AM
> To: Alaios
> Cc: R-help at r-project.org
> Subject: Re: [R] combinations between two vectors
>
> I can't quite tell what you want: your example output is either
> unclear to me or mangled by posting in HTML (please don't).
>
> Is
> expand.grid(test, test)
> what you want, or partway to what you want?
>
>
> Sarah
>
> On Thu, Dec 18, 2014 at 9:56 AM, Alaios via R-help <r-help at r-project.org> wrote:
>> Hi all,I am looking for a function that would give me all the combinations between two vectors.Lets take as example the
>>
>> test<-seq(1,30000,by=5000)
>> Browse[2]> test
>> [1]     1  5001 10001 15001 20001 25001
>> I want all the combinations between two times the test... I think this is  called permutation so a function that could do permutation(test,test)and produce the following
>> 1,11,50011,100011,15001....
>> 3,13,5001...25001,20001,25001,25001
>> is there such a function ?
>> RegardsAlex
>>
>>
>>          [[alternative HTML version deleted]]
>>
>



More information about the R-help mailing list