私は以下を持っています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
特定の郵便番号グループに対して、可能なすべてのプリンシパルバリエーションをポストコードグループ内のすべてのエイリアス(type = A)
およびプリンシパル(type = P)
タイプに割り当てるように拡張する必要があります。
例:最初の郵便番号グループの場合:
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
5つのエイリアスタイプ(type = A)
と3つのプリンシパルタイプがあります(type = P)
。
出力(5 (type=A) * 3 (type=P)) + 3 (type=P)) = 18
は行になり、次のようになります。
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
これはサンプルデータです。実際には、何千もの郵便番号グループがあります。
プリンシパルサブセットとエイリアスサブセットの自己結合を使用するdata.tableバージョンで、その後、プリンシパル行が下部にバインドされます。
rbind(
dt[type=="P",][dt[type=="A"], on="postcode",
.(postcode,suburb=i.suburb,type=i.type,principal=suburb), allow.cartesian=TRUE],
dt[type=="P", c(.SD, .(principal=suburb))]
)
# postcode suburb type principal
# 1: 4101 SOUTH BRISBANE A HIGHGATE HILL
# 2: 4101 SOUTH BRISBANE A SOUTH BRISBANE
# 3: 4101 SOUTH BRISBANE A WEST END
# 4: 4101 HIGHGATE HILL A HIGHGATE HILL
# 5: 4101 HIGHGATE HILL A SOUTH BRISBANE
# 6: 4101 HIGHGATE HILL A WEST END
# 7: 4101 WEST END A HIGHGATE HILL
# 8: 4101 WEST END A SOUTH BRISBANE
# 9: 4101 WEST END A WEST END
#10: 4101 WOOLLOONGABBA A HIGHGATE HILL
#11: 4101 WOOLLOONGABBA A SOUTH BRISBANE
#12: 4101 WOOLLOONGABBA A WEST END
#13: 4101 DUTTON PARK A HIGHGATE HILL
#14: 4101 DUTTON PARK A SOUTH BRISBANE
#15: 4101 DUTTON PARK A WEST END
#16: 4272 BENOBBLE A TAMBORINE MOUNTAIN
#17: 4272 EAGLE HEIGHTS A TAMBORINE MOUNTAIN
#18: 4272 NORTH TAMBORINE A TAMBORINE MOUNTAIN
#19: 4272 MOUNT TAMBORINE A TAMBORINE MOUNTAIN
#20: 4101 HIGHGATE HILL P HIGHGATE HILL
#21: 4101 SOUTH BRISBANE P SOUTH BRISBANE
#22: 4101 WEST END P WEST END
#23: 4272 TAMBORINE MOUNTAIN P TAMBORINE MOUNTAIN
# postcode suburb type principal
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加