関数名: get_pref_code
日本の47都道府県名を含むベクトルを入力として受け取り、対応する2桁の都道府県コード(JIS X 0401準拠)を返す関数です。
get_pref_code <- function(x) {
# 入力がfactor型などの場合を考慮し、文字列ベクトルに変換
x <- as.character(x)
# 47都道府県の基準リスト(JISコード順)
pref_base <- c(
"北海道", "青森", "岩手", "宮城", "秋田", "山形", "福島",
"茨城", "栃木", "群馬", "埼玉", "千葉", "東京", "神奈川",
"新潟", "富山", "石川", "福井", "山梨", "長野", "岐阜",
"静岡", "愛知", "三重", "滋賀", "京都", "大阪", "兵庫",
"奈良", "和歌山", "鳥取", "島根", "岡山", "広島", "山口",
"徳島", "香川", "愛媛", "高知", "福岡", "佐賀", "長崎",
"熊本", "大分", "宮崎", "鹿児島", "沖縄"
)
# 1. 末尾の「府」と「県」を削除(「京都府」→「京都」、「青森県」→「青森」)
x_norm <- sub("[府県]$", "", x)
# 2. 「東京都」の場合のみ「東京」に置換(「京都」の「都」を誤って消さないための措置)
x_norm <- sub("^東京都$", "東京", x_norm)
# 基準リストと照合してインデックスを取得
idx <- match(x_norm, pref_base)
# 数値を2桁の文字列にフォーマット
codes <- sprintf("%02d", idx)
# 該当しない文字列やNAが入力された場合はNAを返す
codes[is.na(idx)] <- NA_character_
return(codes)
}実行例
# テスト用の入力ベクトル
input_vector <- c(
"北海道", # 北海道のまま
"東京都", # 都あり
"東京", # 都なし
"大阪府", # 府あり
"大阪", # 府なし
"京都府", # 府あり
"京都", # 府なし
"青森県", # 県あり
"沖縄", # 県なし
"存在しない県" # 無効な入力
)
# 関数の実行
result <- get_pref_code(input_vector)
# 結果の表示
print(data.frame(入力 = input_vector, コード = result)) 入力 コード
1 北海道 01
2 東京都 13
3 東京 13
4 大阪府 27
5 大阪 27
6 京都府 26
7 京都 26
8 青森県 02
9 沖縄 47
10 存在しない県 <NA>以上です。

