[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