1

I am new to R and I have data like below

NAME
----
Balachandra
Sunita
Kali
Jagmeet

I would like to make it as

NAME1       NAME2
-----------------------
Balachandra Balachandra
Balachandra Sunita
Balachandra Kali
Balachandra Jagmeet    
Sunita      Balachandra
Sunita      Sunita
Sunita      Kali
Sunita      Jagmeet    
Kali        Balachandra
Kali        Sunita
Kali        Kali
Kali        Jagmeet    
Jagmeet     Balachandra
Jagmeet     Sunita
Jagmeet     Kali
Jagmeet     Jagmeet    

To have all possible combinations of Names

Any idea how to do that?

Slizzered
  • 869
  • 2
  • 9
  • 23
Vinay
  • 75
  • 1
  • 8
  • 1
    Do not post your data as an image, please learn how to give a [reproducible example](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610) – Jaap Jul 12 '16 at 08:24
  • Sure, I will make sure not to add data as image – Vinay Jul 12 '16 at 10:05

1 Answers1

2

We can use expand.grid

expand.grid(NAME1=df1$NAME, NAME = df1$NAME)[2:1]
#      NAME         NAME1
#1  Balachandra Balachandra
#2  Balachandra      Sunita
#3  Balachandra        Kali
#4  Balachandra     Jagmeet
#5       Sunita Balachandra
#6       Sunita      Sunita
#7       Sunita        Kali
#8       Sunita     Jagmeet
#9         Kali Balachandra
#10        Kali      Sunita
#11        Kali        Kali
#12        Kali     Jagmeet
#13     Jagmeet Balachandra
#14     Jagmeet      Sunita
#15     Jagmeet        Kali
#16     Jagmeet     Jagmeet

Or use CJ from data.table

library(data.table)
setDT(df1, key = "Name")[CJ(Name, Name)]

data

df1 <- data.frame(NAME = c("Balachandra", "Sunita", "Kali", 
               "Jagmeet"), stringsAsFactors=FALSE)
akrun
  • 874,273
  • 37
  • 540
  • 662
  • Thank you @akrun... This is what I was looking for.. But what does [2:1] mean in expand.grid? – Vinay Jul 14 '16 at 08:07
  • @Vinay I was just rearranging the columns. So, 2:1 will get the second column 1st and 1st column 2nd so as to match your expected output – akrun Jul 14 '16 at 08:42