表計算ソフトからのデータの読み込み


1)データの入力
 表計算ソフトで次のような形式にデータを整える。

 1行目に変数名
   英字で始まる半角英数字。ただし_は使えない。
   多分、8文字以内とか長さに制約あるかもしれない。
   Rの関数と同じ名前にしない方がいいでしょう。

 2行目以降がデータ。

 例えば次のようなデータを表計算ソフト(エクセル、ロータス、gnumericなど)に入力。

 エクセルなどを開いて一部でよいので入力してみる。
sampleno name math english seibetu
1 大道 太郎 90 80 1
2 石田 幸輔 30 40 1
3 沢田 よしこ   50 2
4 太田 政則 50 60 1
5 大木 健太 30   1
6 相川 初恵 20 40 2


 注)欠損値には、何も入力しない。
  .を欠損値とすると、その変数すべてが文字と扱われてしまい、計算してくれなくなる。
   セルの中には タブ記号は入力しない。

 エクセルの例




2)データの保存
(1)オリジナルファイル(表計算ソフト独自の形式で書式などを含んでいる)の保存
  適当な名前をつけて保存。
たとえばmihondata.xls

(2)テキスト形式での保存
 オリジナルファイルのままでは読み込めないので、Rで読み込めるような”(タブ区切り)テキスト形式”で保存しなおし。

 エクセルの場合
 ファイル->別名で保存 ->フォーマット(ファイルの種類)->テキスト(タブ区切り)
 として、適当な名前で保存。
   例えば mihondata.txt

 このとき、桁数が大きい数字で , で区切られていると、読み込んだときに文字列として扱われるので ,表示はしない。


 Mac OSX版のエクセルの場合




・確認のため、エディタやブラウザなどで開いてみてみる。
 このようなものが表示されればok。

sampleno name math english seibetu
1 大道 太郎 90 80 1
2 石田 幸輔 30 40 1
3 沢田 よしこ 50 2
4 太田 政則 50 60 1
5 大木 健太 30 1
6 相川 初恵 20 40 2


3)Rでの読み込み
 このような書式のファイルを読み込むのが下記の関数。

read.delim("ファイル名")
表計算形式で、タブ区切りのデータを読みこむ。
ファイル名にはパス名も指定する。
注)Rのメニューで このファイルが保存されているフォルダをworking directoryと指定すると、パス名は省略可能。
 Mac 版 Rの場合  Tool > Change working directory
 WIN 版 Rの場合  File > Change dir....


適当なデータセット(オブジェクト)名を付けて、それに読み込む。
あとは
 データセット名$ファイルで指定した変数名 
 のように指定すれば、その変数に対して各種の計算ができる。

#ddというデータセットに「mihondata.txt」を読み込む。
dd<-read.delim("mihondata.txt")

#表示してみる
dd

#入力したものと同じかをチェックしておく。
# NA は欠損値(Not Available)
#全角文字が文字化けしている場合は適当なフォントを指定するとただしく表示されるかも。
#mac の場合 環境設定    WINの場合 GUI preference

#簡単な記述統計を出してみる
summary(dd)

# NA's 欠損値の数
#最大、最小などからも入力ミスなどないかなどチェック。
#summary(dd)
# sampleno name math english
# Min. :1.00 êŒìcÅ@çKï„ :1 Min. :20 Min. :40
# 1st Qu.:2.25 ëäêÏÅ@èâåb :1 1st Qu.:30 1st Qu.:40
# Median :3.50 ëæìcÅ@êュë• :1 Median :30 Median :50
# Mean :3.50 ëÂìケÅ@ëæòY :1 Mean :44 Mean :54
# 3rd Qu.:4.75 ëÂñÿÅ@åíëæ :1 3rd Qu.:50 3rd Qu.:60
# Max. :6.00 ëÚìcÅ@ÇÊǵDZ:1 Max. :90 Max. :80
NA's : 1 NA's : 1
# seibetu
# Min. :1.000
# 1st Qu.:1.000
# Median :1.000
# Mean :1.333
# 3rd Qu.:1.750
# Max. :2.000



#平均を算出してみる。
mean(dd)

#name は文字変数なので平均値を計算してくれないのは当然。しかしmath, english も計算されていない。

#sampleno name math english seibetu
#3.500000 NA NA NA 1.333333

#mean 関数は、欠損値があると計算してくれないので、欠損値を除外して計算するというオプションを指定して再度実行。
#関数によって、欠損値の扱いが若干異なるので、どうなっているを ヘルプファイルを見てみる。
#?関数名 でその関数についてのヘルプを呼べる。
?mean

mean(dd,na.rm =TRUE)

# sampleno name math english seibetu
# 3.500000 NA 44.000000 54.000000 1.333333
#Warning message:
#argument is not numeric or logical: returning NA in: mean.default(X[[2]], ...)


hist(dd$english)
plot(dd$english,dd$math)
table(dd$seibetu)

cor(dd$english,dd$math)

#corは欠損があると計算してくれない
#Error in cor(dd$english, dd$math) : missing observations in cov/cor

?cor
#欠損のない完全なサンプルのみ使うことを指定
cor(dd$english,dd$math,use="complete")




・その他注意事項
 数字のつもりでも、文字変数として読み込まれているため、計算できないことがある。
 数字として扱われているか否かをチェックするには下記のコマンドが使える。

is.numeric(変数名)

is.numeric(dd$english)

#[1] TRUE

is.numeric(dd$name)
[1] FALSE


 数字の中に,や%が含まれていないか、欠損値のところに何か文字が入っていないかなどをチェック。

4)応用編
 webからエクセルデータをダウンしてきて使う。

http://www.stat.go.jp/data/kokusei/2000/kakutei/index.htm
から北海道のデータをダウンロード



このままでは読めないので上で指定したように整形。
 1行目に半角英数字の変数名を付ける。
 余分な行、列を削除。
 数字の表示から ,を除く。



 これをテキスト形式で保存。
kakutei-01.txt

hok<-read.delim("kakutei-01.txt")
hok
summary(hok)

plot(hok$jinko,hok$setai)
cor(hok$jinko,hok$setai)


5)その他
 タブ区切りのテキスト以外も読み込み可能。
?read.delim


# read.csv(file, header = TRUE, sep = ",", quote="\"", dec=".",
# fill = TRUE, ...)

# read.csv2(file, header = TRUE, sep = ";", quote="\"", dec=",",
# fill = TRUE, ...)

# read.delim(file, header = TRUE, sep = "\t", quote="\"", dec=".",
# fill = TRUE, ...)

# read.delim2(file, header = TRUE, sep = "\t", quote="\"", dec=",",
# fill = TRUE, ...)

#foreignライブラリをロードしておくと
library(foreign)

#STATA, SAS, SPSSなどのデータセットを読み込める。
?read.dta
?read.spss
?read.ssd
#この他は、Rのフォルダ内のlibrary/foreign/html/00Index.htmlを参照