=== 読者が配色を変更したい場合 ===
◎外側の色を変えるには,次の色をクリック
== Rによる度数分布表,クロス集計表の作成 == R version 4.0.3 (2020-10-10) R version 4.0.4 Patched (2021-02-17) ----- 最終更新年月日:2021.3.21 1. CSVファイルの読み込み
1.1 CSVファイルとは
CSVとは,「Comma Separated Value」(カンマで区切った値)の頭文字で,Excelなどの表計算ソフトのデータの値の部分はCSVファイルというカンマ区切りに書かれたテキストファイルで書けます.ExcelからCSVファイルを読み出すことができ,Excelデータのうちで1枚のシートから成るデータはCSVファイルとして保存することができます. |
右のようなExcelデータがあるとする.1行目は列見出し(列タイトル)で,2行目以下は各行が1人分のデータを表す. このExcelデータをExcelの中からファイル→名前を付けて保存→ファイルの種類:カンマ区切り(*.CSV)で保存すると,次のようなテキストファイルができる. child,age,sport,fruit 大人,35,野球,りんご 子供,12,サッカー,みかん 大人,26,野球,みかん 子供,10,野球,みかん 大人,41,野球,りんご 「カンマ区切り」ということから分かるように,カンマは区切り記号に使われているので,カンマ自体を含むデータは文字列を示すダブルクォート(" ")の中に入れて表す.・・・ExcelでCSVファイルとして保存するときに自動的に付けられる. child,age,寄付金,sport,fruit 大人,35,"1,200",野球,りんご 子供,12,120,サッカー,みかん 大人,26,"3,500",野球,みかん 子供,10,80,野球,みかん 大人,41,500,野球,りんご |
1.2 RでCSVファイル読み込むには
(1) ファイルがRで指定された作業用フォルダ(ディレクトリ)におかれていれば,単純にファイル名を書けば利用できます.現在設定されている作業用フォルダを調べるには(wd→working directoryの略と考える)
getwd()
⇒例えば, "C:/Users/yourname/Documents"などと返される.作業用フォルダを"C:/data/for_R"に変更するには
setwd("C:/data/for_R")
• getwd()で示されたフォルダにファイルを置けば、ファイル名だけでRを使った作業ができる.
• setwd(".....")を使えば,作業用ディレクトリを変更できる・・・ただし,Rを終了すれば元の設定に戻る. 元の設定を変更するには,Rコンソールのメニュー画面から,ファイル→ディレクトリの変更を行うとよい. • その時だけ使うファイルは,作業用ディレクトリを変更しなくても,フルパスで"C:/data/tmp/abc.csv"などと書けばよい. |
(2) RでCSVファイルを読み込むには
read.csv("ファイル名")
(1)で説明したように,ファイルが作業用フォルダになれば,ファイル名だけでよく,他のフォルダにあるときはフルパスでファイル名を書けばよい.RでCSVファイルを読み込んで,次の作業につないでいくには
name1<-read.csv("ファイル名")
などと書く.これにより,文字・数値のどちらも含むことのできるデータフレームの変数名name1にCSVファイルの内容が代入される.読み込まれたデータフレームの内容は,変数名name1を書けば表示される. child,age,sport,fruit 大人,35,野球,りんご 子供,12,サッカー,みかん 大人,26,野球,みかん 子供,10,野球,みかん 大人,41,野球,りんご |
2. 度数分布表,クロス集計表の作成
2.1 度数分布表とは
child<-c("大人","子供","大人","大人","大人","子供")
のように1次元のデータ(ベクトル)が変数名childで保存されているとき,このデータに含まれる値が各々何個あるかを数え上げるには
table(child)
と書きます.⇒結果は,次のような度数分布表として出力されます. child 子供 大人 2 4
data1$child
という形でドルマーク($)を使って取り出せる. |
table(data1$child)
とすればよい.これにより子供 大人 2 3 同様にして
table(data1$fruit)
によりみかん りんご 3 2 |
2.2 クロス集計表とは
みかん りんご サッカー 1 0 野球 2 2 このクロス集計表を求めるための入力は
table(data1$sport, data1$fruit)
となっている.このように,関数table()は2次元までのクロス集計を得るのに適している.他の例では,
table(data1$child, data1$sport)
とすれば,大人子供別の好きなスポーツのクロス集計表が得られる.
サッカー 野球 子供 1 1 大人 0 3 read.csv( )は,カンマで区切られたファイル(CSVファイル)を読み込むことを想定した関数であるが,もっと一般のテキストファイルを表形式に読み込む関数read.table( )を使っても,同様の結果を起こせる. そもそも,区切り文字をカンマだけに決めてしまうと,小数点(.)の代わりにカンマ(,)やセミコロン(;)を小数点として使う国で困るようだ.また,一般のテキストファイルの場合には,ヘッダ(列見出し:ラベル)がある場合もない場合も起こる.そこで,read.table( )でsep = "," により区切り文字をカンマにすると指定し, header=TRUEにより,第1行を列ラベルとして使用することを指定すると,read.csv( )と同じ結果が得られる. さらに,区切り文字として,タブキー,半角スペースが使用されている場合などにも対応できるようになっている. |
【例2.2.1】 次のCSVファイルを,read.csv( )で読み込むと child,age,寄付金,sport,fruit 大人,35,"1,200",野球,りんご 子供,12,120,サッカー,みかん 大人,26,"3,500",野球,みかん 子供,10,80,野球,みかん 大人,41,500,野球,りんご child age 寄付金 sport fruit 1 大人 35 1,200 野球 りんご 2 子供 12 120 サッカー みかん 3 大人 26 3,500 野球 みかん 4 子供 10 80 野球 みかん 5 大人 41 500 野球 りんご V1 1 child,age,寄付金,sport,fruit 2 大人,35,"1,200",野球,りんご 3 子供,12,120,サッカー,みかん 4 大人,26,"3,500",野球,みかん 5 子供,10,80,野球,みかん 6 大人,41,500,野球,りんご child age 寄付金 sport fruit 1 大人 35 1,200 野球 りんご 2 子供 12 120 サッカー みかん 3 大人 26 3,500 野球 みかん 4 子供 10 80 野球 みかん 5 大人 41 500 野球 りんご |
2.3 クロス集計表の留意点
(1) 数値データがあるときの意外な結果数値が含まれるデータから度数分布表やクロス集計表を作ると,思いがけず使いにくいものになる.
• 同じものがほとんどないので,全部並べただけのものができる. table(data0$身長, data0$体重)の結果は次のようになる. 61.3 67.5 68.3 71.2 72.5 165 0 1 0 0 0 168 0 0 1 0 0 171 0 0 0 1 0 172 1 0 0 0 0 181 0 0 0 0 1 |
(2) 列数が3個以上ある表に対して,列を指定せずにtable( )関数を用いた場合,「表」として2次元までしか表示できないから,左から2列のクロス集計表を示し,残りの右の列は「すべての組合せを場合分けとして示される」 例えば,次のCSVファイルをdata1という変数名で読み込んだとき,列は4通りある. > data1 性別 スポーツ 果物 朝食 1 男 野球 りんご パン 2 女 サッカー みかん パン 3 女 野球 みかん ごはん 4 男 野球 みかん ごはん 5 男 サッカー りんご パン > table(data1) , , 果物 = みかん, 朝食 = ごはん スポーツ 性別 サッカー 野球 女 0 1 男 0 1 , , 果物 = りんご, 朝食 = ごはん スポーツ 性別 サッカー 野球 女 0 0 男 0 0 , , 果物 = みかん, 朝食 = パン スポーツ 性別 サッカー 野球 女 1 0 男 0 0 , , 果物 = りんご, 朝食 = パン スポーツ 性別 サッカー 野球 女 0 0 男 1 1 |