I have the following data.table:
require(data.table)
dt = data.table(structure(list(postcode = c("4101", "4101", "4101", "4101", "4101",
"4101", "4101", "4101", "4272", "4272", "4272", "4272", "4272"
), suburb = c("SOUTH BRISBANE", "HIGHGATE HILL", "WEST END",
"WOOLLOONGABBA", "DUTTON PARK", "HIGHGATE HILL", "SOUTH BRISBANE",
"WEST END", "BENOBBLE", "EAGLE HEIGHTS", "NORTH TAMBORINE", "MOUNT TAMBORINE",
"TAMBORINE MOUNTAIN"), type = c("A", "A", "A", "A", "A", "P",
"P", "P", "A", "A", "A", "A", "P")), class = "data.frame", row.names = c(NA,
-13L)))
dt
postcode suburb type
1: 4101 SOUTH BRISBANE A
2: 4101 HIGHGATE HILL A
3: 4101 WEST END A
4: 4101 WOOLLOONGABBA A
5: 4101 DUTTON PARK A
6: 4101 HIGHGATE HILL P
7: 4101 SOUTH BRISBANE P
8: 4101 WEST END P
9: 4272 BENOBBLE A
10: 4272 EAGLE HEIGHTS A
11: 4272 NORTH TAMBORINE A
12: 4272 MOUNT TAMBORINE A
13: 4272 TAMBORINE MOUNTAIN P
I need to expand it in such a way that for a given postcode group, it assigns all possible principal variations to all alias (type = A) and principal (type = P) types within the postcode group
e.g. For the first postcode group:
dt[postcode == 4101]
postcode suburb type
1: 4101 SOUTH BRISBANE A
2: 4101 HIGHGATE HILL A
3: 4101 WEST END A
4: 4101 WOOLLOONGABBA A
5: 4101 DUTTON PARK A
6: 4101 HIGHGATE HILL P
7: 4101 SOUTH BRISBANE P
8: 4101 WEST END P
There are 5 alias types (type = A) and 3 principal types (type = P).
The output will be (5 (type=A) * 3 (type=P)) + 3 (type=P)) = 18 rows, and will look like this:
postcode suburb type principal
4101 SOUTH BRISBANE A HIGHGATE HILL
4101 SOUTH BRISBANE A SOUTH BRISBANE
4101 SOUTH BRISBANE A WEST END
4101 HIGHGATE HILL A HIGHGATE HILL
4101 HIGHGATE HILL A SOUTH BRISBANE
4101 HIGHGATE HILL A WEST END
4101 WEST END A HIGHGATE HILL
4101 WEST END A SOUTH BRISBANE
4101 WEST END A WEST END
4101 WOOLLOONGABBA A HIGHGATE HILL
4101 WOOLLOONGABBA A SOUTH BRISBANE
4101 WOOLLOONGABBA A WEST END
4101 DUTTON PARK A HIGHGATE HILL
4101 DUTTON PARK A SOUTH BRISBANE
4101 DUTTON PARK A WEST END
4101 HIGHGATE HILL P HIGHGATE HILL
4101 SOUTH BRISBANE P SOUTH BRISBANE
4101 WEST END P WEST END
This is example data, in reality I have thousands of postcode groups.