Rで自作関数:get_pref_code

関数名: 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>

以上です。