データ処理の小技 2

例題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/