例題2: R でプログラミング さきの例題1では Excel の関数を活用してデータを 処理しました。 この例題2では、まったく同じデータ処理を R で やってみましょう。 R でプログラムを書いてみると、Excel ではかなり 煩雑だった処理を、ずいぶんと簡潔に効率的に行 えることがわかるはずです。 R による処理プログラム 以下の5行でOK bunrui = c("不動産“,"建設“,"金融保険“,"小売“,"卸売“,"サ-ビス“, "運輸“,"製造“,"製造“,"製造“,"製造","製造","電力ガス水道") corp =read.csv("m-corp.csv",head=T) 地域 = substring(corp[,4],13,14) 産業 = bunrui[as.integer(substring(corp[,1],1,2))] print(table(地域,産業)) 業種分類のベクトル ( bunrui ) を定義 データを読み込む ( m-corp.csv corp ) corp の 4列目の 13文字目から14文字目までを取り出す corp の 1列目の 1文字目から2文字目までを取り出す数値化業種名 クロス集計表を作成して、表示 さらに掘り下げてみましょう。 ここまでは、市町村名を、「岸和」、「堺市」というよう に、むりやり2文字に揃えていました。これを、ちゃ んとした市町村名にあらためましょう。 つまり、「岸和」はちゃんと「岸和田」に、「大阪」は ちゃんと「大阪狭山市」にという風に、クロス集計表 の地域名を、正式な市町村名に変更しましょう。 Excel での解決策 Excel でやる場合には、岸和→岸和田市、大阪→ 大阪狭山市といった対応表を作成して、ふたたび Lookup 関数を適用すればよいわけです。 このときに注意しなくてはいけないのは、Lookup 関数の第二引数で指定する「検査範囲」の値(ベク トル)は、昇順ソートされていなければならないとい うことです。 R での解決策 以下の三つの解決法を考えてみましょう。 1. 条件指定で、ベクトルの各要素を置換す る。 2. 市町村名の変換ベクトルを別途に用意す る。 3. 最初に市町村名を切り出す時に、正規表 現を使う。 1. 条件指定でベクトル要素を置換 ベクトル x の各要素のうち、負の値をすべてゼロに置き換えます。 x = c(1,2,-1,9,-2,3,2,-5) x[ x<0 ] = 0 ベクトル 地域 の各要素のうち、”岸和”の値をすべて “岸和田”に 置き換えます。 地域[ 地域 == “岸和” ] = “岸和田” 上のような行を、すべての市町村について書けば、目的の処理がで きます。でも、ゴチャゴチャして、あまり美しくありません。 2. 変換用ベクトルを別途に準備 names() 関数を使うと、ベクトルの各要素に名前をつけることがで きました。たとえば・・・ price = c(10,3,4,5) goods = c( “りんご” , ”みかん” , ”ぶどう” , ”もも” ) names(price) = goods price[ “みかん” ] 次のようなベクトルを別途に準備すれば、うまくいきそうです。 city = c( “岸和田市” , ”和泉市” , ”大阪狭山市” , … ) ryaku = c( “岸和” , ”和泉” , ”大阪” , … ) names(seishiki) = ryaku 3. 正規表現による部分列の切り出し とっておきのやり方を紹介します。 regexpr( 正規表現 , 対象文字列 , オプション ) 対象文字列から、正規表現にマッチする部分を探して、最初 に見つかった位置を返します。 regexpr( “[市]” , “大阪市此花区” ) regexpr( “[12345]” , “大阪 554-0001 ” ) regexpr( “[市郡]” , “大阪府岸和田市” ) 正規表現とは R における正規表現 3 6 7 http://e-words.jp/ http://www.okada.jp.org/RWiki/
© Copyright 2024 ExpyDoc