• 検索結果がありません。

Microsoft PowerPoint - 統数研シンポジウム_R_ ppt

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - 統数研シンポジウム_R_ ppt"

Copied!
61
0
0

読み込み中.... (全文を見る)

全文

(1)

で データハンドリング

(2)

2

本日のメニュー

„

データフレームとは ←

„

データフレームの作成

„

データハンドリングの方法と例

height De ns it y 0.00 0.05 0.10 0.15 0.20 0.25 60 65 70 75 80 Bass 2 Bass 1 Tenor 2 0.00 0.05 0.10 0.15 0.20 0.25 Tenor 1 0.00 0.05 0.10 0.15 0.20 0.25 Alto 2 Alto 1 Soprano 2 60 65 70 75 80 0.00 0.05 0.10 0.15 0.20 0.25 Soprano 1

(3)

3

データフレームとは

EXCEL:シート ACCESS:テーブル SAS:データセット

„

統計解析を行うデータの形式は様々

‰

R 上で)データを手で入力して・・・

‰

テキストファイル,

EXCEL,ACCESS,SAS などの形式

„

R でデータ解析を行う際は,

データフレーム

という形式

(4)

4

データフレームとは

„

数値ベクトルや文字ベクトル,

因子ベクトルなどの異なる型の

データをまとめてもつ変数

外見は行列と同じ

各列の要素の型はバラバラ

でも構わない

„

データフレームの各行・各列は

ラベルを必ず持ち,ラベルに

よる操作が可能

64

166

M

57

173

M

72

177

M

55

162

F

51

158

F

WEIGHT

HEIGHT

SEX

(5)

5

本日のメニュー

„

データフレームとは

„

データフレームの作成 ←

„

データハンドリングの方法と例

Scatter Plot Matrix Sepal.Length 7 8 7 8 5 6 5 6 Sepal.Width3.5 4.0 4.5 3.54.04.5 2.0 2.5 3.0 2.02.53.0 Petal.Length4 5 6 7 4 5 6 7 1 2 3 4 1 2 3 4 Petal.Width1.5 2.0 2.5 1.52.02.5 0.0 0.5 1.0 0.00.51.0

(6)

6

データフレームの作成

„

R でベクトルデータを作成した後,データフレームを作成

(いわゆる手入力)

「性別」「身長」「体重」データをベクトルで用意

した後,関数

data.frame()

で1つのデータフレーム

に変換する

„

ファイルからデータを読み込んで,データフレームを作成

関数

read.table()

などでファイルからデータを読込

パッケージ

RODBC の関数

odbcConnectXXXXX()

データファイルにアクセスした後,関数

sql.Query()

でファイルからデータを読込

(7)

7 M M M F F SEX 64 57 72 55 51 WEIGHT 166 173 177 162 158 HEIGHT 64 166 M 57 173 M 72 177 M 55 162 F 51 158 F WEIGHT HEIGHT SEX

> sex

<- c("F","F","M","M","M")

> height <- c(158,162,177,173,166)

> weight <- c( 51, 55, 72, 57, 64)

> x <- data.frame(SEX=sex, HEIGHT=height,

WEIGHT=weight)

data.frame()

データフレームの作成(手入力)

(8)

8

データフレームの閲覧

„

データフレームの中身を確認したいときは・・・

‰

R のコンソール画面で

‰

R 標準のデータエディタで (←データを見ながらの作業不可)

‰

relimp パッケージのテキストウインドウで

データエディタ > edit(x) テキストウインドウ > library(relimp) > showData(x) コンソール上 > x

(9)

9

データフレームを作成すると・・・

> summary(x) # データフレームの列ごとの特徴を見る SEX HEIGHT WEIGHT

F:2 Min. :158.0 Min. :51.0 M:3 1st Qu.:162.0 1st Qu.:55.0 Median :166.0 Median :57.0 Mean :167.2 Mean :59.8 3rd Qu.:173.0 3rd Qu.:64.0 Max. :177.0 Max. :72.0 # 密度関数のプロット > library(lattice)

> densityplot( height │ voice.part, data=singer, layout=c(2,4)) # 対散布図

> splom( iris[1:4], groups = Species, data = iris, + panel = panel.superpose) 64 166 M 57 173 M 72 177 M 55 162 F 51 158 F WEIGHT HEIGHT SEX

(10)

10

データフレームの作成(⇔

.txt )

> x <- read.table("data04.txt",

header=T, sep="," ) sex height weight

1 F 158 51 2 F 162 55 3 M 177 72 4 M 173 57 5 M 166 64 > x <- read.csv("data04.txt") sex,height,weight F,158,51 F,162,55 M,177,72 M,173,57 M,166,64 data04.txt

„

関数

read.table()

などでテキストファイルからデータを

読み込むことが出来る

(11)

11

データフレームの作成(

RODBC)

„

パッケージ

RODBC

の中の関数

odbcConnectXXXXX()

データファイルにアクセスした後,関数

sql.Query()

ファイルからデータを読み込むことが出来る

> library(RODBC) # パッケージの呼出 > tmp <- odbcConnectExcel("c:/data00.xls") # データに接続 > tmp <- odbcConnectAccess("c:/data00.mdb") # (Access の場合) > sqlTables(tmp) # テーブルを表示 > x <- sqlQuery(tmp,"select * from [Sheet1$]") # 読み込み

> x <- sqlQuery(tmp,"select * from [mydata]") # (Access の場合)

> odbcClose(tmp) # 接続を遮断

„

他にも

ORACLE のデータベースや,その他のデータ形式

ファイル(

DBASE,MySQL,PostgreSQL)からデータ

(12)

12

データフレームの作成(

foreign)

Read a SAS XPORT Format Library

read.xport()

Obtain a Data Frame from a Systat File

read.systat()

Obtain a Data Frame from a SAS Permanent

read.ssd()

Read an SPSS Data File

read.spss()

Read Octave Text Data Files

read.octave()

Read a Minitab Portable Worksheet

read.mtp()

Read Epi Info Data Files

read.epiinfo()

Read Stata Binary Files

read.dta()

Read a DBF File

read.dbf()

Read an S3 Binary File

data.restore()

用途 関数

„

パッケージ

foreign

の中には,外部データを読み込む

(13)

13

データフレームの作成(

foreign)

> library(foreign)

„

SPSS データを R に読み込む例

> x <- read.spss("mydata.sav")

„

SAS データを R に読み込む例

*** SAS データを XPT ファイルに変換 ;

libname out xport "C:/mydata.xpt" ;

proc copy in=work out=out ;

select mydata / mt=data ;

run ;

### R から SAS の XPT ファイルを読み込む

(14)

14

本日のメニュー

„

データフレームとは

„

データフレームの作成

(15)

15

データハンドリング例(導入)

„

Aさん~D女史 (変数はNAME) の 4 人に,やせ薬

(GROUP==Active) か偽薬 (GROUP==Placebo) を投薬する

„

投薬してから

1日目(DAY==1)~3日目(DAY==3)に体重を測定する

„

体重は,午前

(KG_AM) と午後 (KG_PM) の1日2回測定する

B氏 D女史 Cくん Aさん NAME Placebo Active Placebo Active GROUP D女史 B氏 Aさん Cくん Cくん D女史 Aさん B氏 B氏 D女史 Cくん Aさん NAME 59.9 59.8 3 58.6 59.0 3 61.5 63.5 3 71.2 69.8 3 70.2 71.2 2 61.4 61.2 2 64.0 65.8 2 59.5 58.1 2 58.0 58.5 1 61.7 62.7 1 71.5 71.3 1 66.6 65.2 1 KG_PM KG_AM DAY

(16)

16

データハンドリング例(導入)

B氏 D女史 Cくん Aさん NAME Placebo Active Placebo Active GROUP

„

データの形式は

EXCEL

„

体重に関するデータとグループに関するデータの

2 つ

„

まずは

2 つのデータセットを R に読み込ませる

D女史 B氏 Aさん Cくん Cくん D女史 Aさん B氏 B氏 D女史 Cくん Aさん NAME 59.9 59.8 3 58.6 59.0 3 61.5 63.5 3 71.2 69.8 3 70.2 71.2 2 61.4 61.2 2 64.0 65.8 2 59.5 58.1 2 58.0 58.5 1 61.7 62.7 1 71.5 71.3 1 66.6 65.2 1 KG_PM KG_AM DAY data1.xls ⇒ データフレーム x1 に data2.xls ⇒ x2 に

(17)

17

データハンドリング例(1)

### データの読み込み

> library(RODBC) # パッケージの呼出 > tmp <- odbcConnectExcel("C:/data1.xls") # データに接続

> x1 <- sqlQuery(tmp,"select * from [Sheet1$]") # 読み込み > odbcClose(tmp) # 接続を遮断

> tmp <- odbcConnectExcel("C:/data2.xls") # データに接続 > x2 <- sqlQuery(tmp,"select * from [Sheet1$]") # 読み込み

> odbcClose(tmp) # 接続を遮断

(18)

18

データハンドリング例(2)

### データフレーム x1 と x2 を併合(マージ)する

### 本当は列について自動で整列されるが,あえて整列させない

> x <- merge(x1, x2, by="NAME", all=T, sort=F) データフレーム x 59.9 58.6 61.5 71.2 70.2 61.4 64.0 59.5 58.0 61.7 71.5 66.6 KG_PM D女史 B氏 Aさん Cくん Cくん D女史 Aさん B氏 B氏 D女史 Cくん Aさん NAME Active 59.8 3 Placebo 59.0 3 Active 63.5 3 Placebo 69.8 3 Placebo 71.2 2 Active 61.2 2 Active 65.8 2 Placebo 58.1 2 Placebo 58.5 1 Active 62.7 1 Placebo 71.3 1 Active 65.2 1 GROUP KG_AM DAY

(19)

19

データハンドリング例(3)

### 列の順番を入れ替える > x <- x[,c(1,5,2,3,4)] > x <- x[,c("NAME","GROUP","DAY","KG_AM","KG_PM")] データフレーム x D女史 B氏 Aさん Cくん Cくん D女史 Aさん B氏 B氏 D女史 Cくん Aさん NAME 59.9 59.8 3 Active 58.6 59.0 3 Placebo 61.5 63.5 3 Active 71.2 69.8 3 Placebo 70.2 71.2 2 Placebo 61.4 61.2 2 Active 64.0 65.8 2 Active 59.5 58.1 2 Placebo 58.0 58.5 1 Placebo 61.7 62.7 1 Active 71.5 71.3 1 Placebo 66.6 65.2 1 Active KG_PM KG_AM DAY GROUP

(20)

20

データハンドリング例(4)

### 行についてデータを NAME で整列(ソート;1変数)する > sortlist <- order(x$NAME) # 順番を取得 > X <- x[sortlist,] # 整列 > rownames(X) <- c(1:nrow(X)) # 行番号の整形 D女史 D女史 D女史 Cくん Cくん Cくん B氏 B氏 B氏 Aさん Aさん Aさん NAME 59.9 59.8 3 Active 61.4 61.2 2 Active 61.7 62.7 1 Active 71.2 69.8 3 Placebo 70.2 71.2 2 Placebo 71.5 71.3 1 Placebo 58.6 59.0 3 Placebo 59.5 58.1 2 Placebo 58.0 58.5 1 Placebo 61.5 63.5 3 Active 64.0 65.8 2 Active 66.6 65.2 1 Active KG_PM KG_AM DAY GROUP データフレーム X

(21)

21

データハンドリング例(目的は・・・)

D女史 D女史 D女史 Cくん Cくん Cくん B氏 B氏 B氏 Aさん Aさん Aさん NAME 59.9 59.8 3 Active 61.4 61.2 2 Active 61.7 62.7 1 Active 71.2 69.8 3 Placebo 70.2 71.2 2 Placebo 71.5 71.3 1 Placebo 58.6 59.0 3 Placebo 59.5 58.1 2 Placebo 58.0 58.5 1 Placebo 61.5 63.5 3 Active 64.0 65.8 2 Active 66.6 65.2 1 Active KG_PM KG_AM DAY GROUP D女史 Aさん NAME 「3日目の体重の平均」と 「1日目の体重の平均」の 変化量が -2kg 未満の人 を抽出する

(22)

22

データハンドリング例(5)

### apply(列を指定, 1(行毎という意味), 適用する関数) > tmp <- apply(X[,4:5], 1, mean) > tmp <- apply(X[,4:5], 1, function(x){sum(x)/length(x)} ) ### 列を追加する関数 transform(データフレーム名, 列名=ベクトル) > X1 <- transform(X, MEAN=tmp) 59.9 61.4 61.7 71.2 70.2 71.5 58.6 59.5 58.0 61.5 64.0 66.6 KG_PM D女史 D女史 D女史 Cくん Cくん Cくん B氏 B氏 B氏 Aさん Aさん Aさん NAME 59.85 59.8 3 Active 61.30 61.2 2 Active 62.20 62.7 1 Active 70.50 69.8 3 Placebo 70.70 71.2 2 Placebo 71.40 71.3 1 Placebo 58.80 59.0 3 Placebo 58.80 58.1 2 Placebo 58.25 58.5 1 Placebo 62.50 63.5 3 Active 64.90 65.8 2 Active 65.90 65.2 1 Active MEAN KG_AM DAY GROUP

(23)

23

データハンドリング例(6)

### 列の数を絞る transform(データフレーム[,残す列]) > X2 <- transform(X1[,c(1,2,3,6)]) ### 列の数を絞る subset(データフレーム名, ### select=-c(削る列1,削る列2, ...))

> X2 <- subset(X1, select = -c(KG_AM, KG_PM))

D女史 D女史 D女史 Cくん Cくん Cくん B氏 B氏 B氏 Aさん Aさん Aさん NAME 59.85 3 Active 61.30 2 Active 62.20 1 Active 70.50 3 Placebo 70.70 2 Placebo 71.40 1 Placebo 58.80 3 Placebo 58.80 2 Placebo 58.25 1 Placebo 62.50 3 Active 64.90 2 Active 65.90 1 Active MEAN DAY GROUP

(24)

24

データハンドリング例(7)

###「DAY毎の平均」という列を追加

### 横展開する関数 reshape(データフレーム名, idvar=固定する列, ### timevar=横展開する列, direction="wide")

> X3 <- reshape(X2, idvar =c("NAME","GROUP"), + timevar="DAY", direction="wide") 61.3 70.7 58.8 64.9 MEAN.2 D女史 Cくん B氏 Aさん NAME 59.85 62.20 Active 70.50 71.40 Placebo 58.80 58.25 Placebo 62.50 65.90 Active MEAN.3 MEAN.1 GROUP

(25)

25

データハンドリング例(8)

###「3日目の体重の平均」−「1日目の体重の平均」 ### という列「DIFF」を作成した後,列の数を絞る

> X4 <- transform(X3[,c("NAME","GROUP")],

DIFF = (X3$MEAN.3 - X3$MEAN.1) )

D女史 Cくん B氏 Aさん NAME -2.35 Active -0.90 Placebo 0.55 Placebo -3.40 Active DIFF GROUP

(26)

26

データハンドリング例(9)

### 体重の変化量が -2kg 未満:subset(データフレーム, 条件式)

> subset(X4, DIFF < -2)

### 体重の変化量が -2kg 未満の人:subset(データ, 条件式, 列名)

> subset(X4, DIFF < -2, c(NAME))

D女史 Aさん NAME -2.35 Active -3.40 Active DIFF GROUP D女史 Aさん NAME

(27)

27

データハンドリング例(10)

### ちなみに,B 氏と C くんを取り出す場合は・・・: ### subset(データフレーム, 列名 %in% 集合ベクトル)

> subset(X4, NAME %in% c("B氏","Cくん"))

### ちなみに,これはエラーとなる・・・ > subset(X4, DIFF<-2) Cくん B氏 NAME -0.90 Placebo 0.55 Placebo DIFF GROUP

(28)

28

本日のメニュー

„ データフレームとは

‰

統計解析を行うためのデータの形式

‰

見た目は行列 ⇒ でも使い勝手が良い

„ データフレームの作成

‰

手入力でもデータの読み込み可だけど・・・

‰

外部データ(テキストファイル,

EXCEL,ACCESS,

SAS,・・・)からでも読み込み可

„ データハンドリングの方法と例

‰

RODBC を使ったデータ読み込みの例を紹介

‰

データのマージ,ソート,変数追加,変数削除,

データの横展開,条件抽出の例を紹介

(29)

29

【おまけ】実務で R にデータを読み込む際・・・

① 〔EXCEL〕→〔RODBCでデータフレームにする〕 ② 〔EXCEL〕→〔CSVに変換〕 →〔関数 read.table() でデータフレームにする〕 ②'〔他のアプリ〕→〔テキストデータ〕 →〔関数 read.table() でデータフレームにする〕 ③〔SAS〕→〔xptに変換〕→〔read.xport()でデータフレームにする〕 (SAS でできないことを R にさせるという意図) ④ SQLでデータベースにも直接アクセスできるはず ⑤ XMLでデータを入力,出力させることもできるはず

★データがちゃんと入力されているかを確認する方法は?

・「データフレームから抜き取り」とか「要約統計量」とか ・「次元の数」と「一番右下のセルに値が正しく入っているか」を確認 ・欠測の数を数える ・EXCEL に出力して比較(コンペア)する ・R から折り返しはきだし,SAS 上で比較(コンペア)する

(30)

30

参考文献&謝辞

„

参考文献

‰

THE R BOOK 4章(岡田昌史 他;九天社)

‰

データ解析環境

R 5章(舟尾,高浪;工学社)

‰

パッケージ「

RODBC」「foreign」のヘルプ

„

発表資料作成の際にお世話になった人

‰

北西 由武さん(塩野義製薬)

‰

高浪 洋平さん(武田薬品工業)

(31)

で データハンドリング

(32)

で データハンドリング

~ ここからはおまけ ~

(33)

33

★ 作業ディレクトリの変更

„

ファイルからデータを読み込むには・・・

‰ まず,データがあるディレクトリ(フォルダ)に作業ディレクトリ を変更する ‰ 次に,関数 read.table() などでファイルからデータを読み込む

„

ファイルからデータやプログラムを読み込んだり,

ファイルにデータを書き出したりする場所を

作業ディレクトリ

という

„

指定したディレクトリに指定した作業ディレクトリに

データがセーブされたり,

R 用エディタなどが保存

されるようになる

> setwd("c:/usr") # 作業ディレクトリを変更 > getwd() # 現在のディレクトリを確認 [1] "c:/usr"

(34)

34

★ 作業ディレクトリの変更

(Windows)

[ファイル] の [ディレクトリの変更] を選択 [Browse] をクリックして, 変更先のディレクトリを選択

(35)

35

★ 作業ディレクトリの変更

(Mac OS X)

[その他] の 作業[ディレクトリの変更] を選択

(36)

36

★ テキストファイル ⇒ データフレーム

> x <- read.table("data01.txt") V1 V2 V3 1 F 158 51 2 F 162 55 3 M 177 72 4 M 173 57 5 M 166 64 F 158 51 F 162 55 M 177 72 M 173 57 M 166 64 data01.txt

(1) 列名がなく,データ間がスペースで区切ら

れている場合

R が勝手に列名を決めている

(37)

37

★ テキストファイル ⇒ データフレーム

> x <- read.table("data02.txt",

header=T )

sex height weight 1 F 158 51 2 F 162 55 3 M 177 72 4 M 173 57 5 M 166 64

sex height weight F 158 51 F 162 55 M 177 72 M 173 57 M 166 64 data02.txt

(2) 列名があり,データ間がスペースで区切ら

れている場合

(38)

38

★ テキストファイル ⇒ データフレーム

> x <- read.table("data03.txt",

header=T, skip=1 )

sex height weight 1 F 158 51 2 F 162 55 3 M 177 72 4 M 173 57 5 M 166 64 ### data03.txt sex height weight

F 158 51 F 162 55 M 177 72 M 173 57 M 166 64 data03.txt

(3)1行目にコメント,2行目に列名があり,

データ間がスペースで区切られている場合

(39)

39

★ テキストファイル ⇒ データフレーム

> x <- read.table("data04.txt",

header=T, sep="," ) sex height weight

1 F 158 51 2 F 162 55 3 M 177 72 4 M 173 57 5 M 166 64 sex,height,weight F,158,51 F,162,55 M,177,72 M,173,57 M,166,64 data04.txt

(4) 列名があり,データ間がコンマで区切ら

れている場合

(40)

40

★ テキストファイル ⇔

EXCEL

„

目的は関数

read.csv() で読み込める形式に

すること(前節の

data04.txt の状態)

‰

まず,

EXCEL ファイルを開き,メニューの

[ファイル] の [開く] から,[名前をつけて保存]

を選択する

‰

保存する名前をつけた後,次に

[ファイルの種類]

から

[CSV カンマ区切り]を選択して保存する

(41)

41

★ テキストファイル ⇔

EXCEL

„

Windows 版 R の場合

別名で保存

(42)

42

★ テキストファイル ⇔

EXCEL

„

Mac OS X 版 R の場合

別名で保存

(43)

43

★ テキストファイル ⇔

EXCEL

> x <- read.csv("data04.csv") sex height weight

1 F 158 51 2 F 162 55 3 M 177 72 4 M 173 57 5 M 166 64 sex,height,weight F,158,51 F,162,55 M,177,72 M,173,57 M,166,64 data04.csv

(4’) 列名があり,データ間がコンマで区切ら

れている場合

(44)

44

★ テキストファイル ⇔

EXCEL

> myname <- c("SEX","HEIGHT","WEIGHT") > x <- read.csv("data05.csv",

header=F, col.names=myname )

sex height weight 1 F 158 51 2 F 162 55 3 M 177 72 4 M 173 57 5 M 166 64 F,158,51 F,162,55 M,177,72 M,173,57 M,166,64 data05.csv

(5) 列名がなく,データ間がコンマで区切ら

れている場合

(45)

45

★ データフレームの作成

EXCELのセルをコピー&ペースト〕

„

Windows 版の場合は,列名をコピーしても

しなくてもよい

# 列名をコピーした場合 x <- read.delim("clipboard", header=

T

) # 列名をコピーしなかった場合 x <- read.delim("clipboard", header=

F

)

(46)

46

★ データフレームの作成

EXCELのセルをコピー&ペースト〕

„

Mac OS X 版の場合は,列名をコピーしては

いけない

excel.mac <- function(...) { args <- c(...)

temp <- matrix(scan(""), byrow=TRUE, ncol=length(args)) data <- data.frame(temp) colnames(data) <- args return(data) } excel.mac("X", "Y") # 列名を入力 1: # ペーストする

(47)

47

SAS ⇒ XML ⇒ R (1)

„

パッケージ

XML

SASXML

を使用する

(作者:

Duncan Temple Lang

<

[email protected]

>)

„

まず,

SAS データセット⇒ XML に変換する

*--- SAS 上のコマンド;

libname xxx xml "C:/demo.xml"

xmltype=oimdbm xmlschema=yes ; proc format ;

value sexf 1="Female" 2="Male" ; data demo(label="Test") ;

input id name $ sex ;

format sex sexf. ; label sex="Gender" ; cards; 111 ABC 1 222 DEF 2 333 GHI 1 444 JKL 2 ;

(48)

48

SAS ⇒ XML ⇒ R (2)

„

次に

XML ⇒ R へ読み込む

‰

パッケージ

SASXML

の中に入っているソース

eventSAS.S,sas.S,sasDataset.R を実行する

‰

その後,以下を実行する

> library(XML) > x <- sas("C:/demo.xml") > x$DEMO id name sex 1 111 ABC Female 2 222 DEF Male 3 333 GHI Female 4 444 JKL Male

(49)

49

<寄り道>

R ⇒ XML ⇒ R

> ### R ⇒ XML へ出力(要パッケージ XML) > tmp <- xmlOutputDOM()

> tmp$addTag("MYDATA", close=F)

> tmp$addTag("X", 1); tmp$addTag("Y", "Yes")

> tmp$closeTag() # MYDATA

> tmp$addTag("MYDATA", close=F)

> tmp$addTag("X", 2); tmp$addTag("Y", "No")

> tmp$closeTag() # MYDATA > saveXML(tmp$value(), file="C:/mydata.xml") ### XML ⇒ R へ入力(要パッケージ SASXML) > x <- sasXMLDataSet("C:/mydata.xml") > x$data$MYDATA X Y 1 1 Yes 2 2 No

(50)

50

<寄り道>

R から SAS を操作する

„

関数

system()

を用いる

### R から SAS を操作する

> cat("proc print data=sashelp.class;¥n", + file="C:/test.sas") > cat("run;¥n", file="C:/test.sas", + append=T) > system(paste('"C:/SASV8/nls/ja/sas.exe"', + '"C:/test.sas"', + '-log C:/test.log + -print C:/test.lst '), + wait = F) SAS の出力

(51)

51

<寄り道>

SAS から R を操作する

„

x コマンド

を用いて

DOS を起動し,R を実行する

*--- SAS から R を操作する ; filename aaa "C:/test.R" ; options noxwait xsync ; data _null_ ;

file aaa ;

put 'x <- 1:5; sink("C:/out.txt"); mean(x)'; run ;

x '"C:/Program Files/R/R-2.3.1/bin/R.exe" --no-save < "C:/test.R"' ;

R の出力

(52)

52

★ データへのアクセス方法(1)

性別が F(女性)かつ体重が 50kg より大きい行を表示

x[ ,SEX=="F" & WEIGHT>50 ]

性別が F(女性)である行を表示 x[SEX=="F", ] 論理ベクトル c(T,F,T) が TRUE と なっている列を表示 x[ ,c(T,F,T)] 3 行目と 4 行目のデータを表示 x[c(3, 4), ] 1 列目と 2 列目のデータを表示 x[c(1, 2)] 指定した列の 3 行目のデータを表示 x[[3,"列名"]], x[[3,"列名"]] 3 行 2 列目のデータを表示 x[3, 2], x[[3, 2]] 2 番目の列データを表示 x[2], x[[2]] 指定した列データを表示 x$列名,x[“列名”], x[["列名"]]

機能

コマンド

(53)

53

★ データへのアクセス方法(2)

„ データフレーム[行番号,列番号]

で指定する

x[c(1,3,5),] # 1,3,5行目にアクセス sex height weight

1 F 158 51 3 M 177 72 5 M 166 64 x[,c(1,3)] # 1,3列目にアクセス sex weight 1 F 51 2 F 55 3 M 72 4 M 57 5 M 64 M 166 64 57 173 M 72 177 M 55 162 F 51 158 F WEIGHT HEIGHT SEX データフレーム x

(54)

54

★ データへのアクセス方法(3)

„ データフレーム$列名

で指定する

> x$height # 身長データ [1] 158 162 177 173 166 > x$height <- NULL # 身長を削除 > x sex weight 1 F 51 2 F 55 3 M 72 4 M 57 5 M 64 64 166 M 57 173 M 72 177 M 55 162 F 51 158 F WEIGHT HEIGHT SEX データフレーム x

(55)

55

★ データの加工・抽出(1)

x と y を併合(マージ)する.

※通常は引数に all=T を指定し,データを全て 残す.all=T を指定しなければデータの共通 部分が結果として返される.

merge(x,y)

x と y を横に並べて結合する

data.frame(x,y)

x と y を横に並べて結合する

cbind(x,y)

x と y を縦に並べて結合する

rbind(x,y)

x の列名を表示する

names(x)

x の行数(データ数)を求める

nrow(x)

x の列数(変数の数)を求める

ncol(x)

機能

コマンド

(56)

56

★ データの加工・抽出(2)

ベクトルで指定した列に対し,条件式に合 う行のみを抽出する subset(x, 条件式, ベクトル) 条件式に合う行のみを抽出する subset(x, 条件式) データフレーム x に新たな列 y を追加する transform(x, y=ベクトル) NA を含む行を削除する na.omit(x) 末尾から b 行だけ抽出する tail(x, n=b) 先頭から a 行だけ抽出する head(x, n=a)

機能

コマンド

(57)

57

★ データのマージ

### データフレーム x1 と x2 を併合(マージ)する

> x <- merge(x1, x2, by="NAME", all=T, sort=F)

### x1 と x3 で,マージするためのキー変数が異なる場合

> x <- merge(x1, x3, by.x="NAME", by.y="NAME2")

B氏 D女史 Cくん Aさん NAME Placebo Active Placebo Active GROUP D女史 B氏 Aさん Cくん Cくん D女史 Aさん B氏 B氏 D女史 Cくん Aさん NAME 59.9 59.8 3 58.6 59.0 3 61.5 63.5 3 71.2 69.8 3 70.2 71.2 2 61.4 61.2 2 64.0 65.8 2 59.5 58.1 2 58.0 58.5 1 61.7 62.7 1 71.5 71.3 1 66.6 65.2 1 KG_PM KG_AM DAY

B氏 D女史 Cくん Aさん NAME2 Placebo Active Placebo Active GROUP

x1

x2

x3

(58)

58

★ データのソート(2変数のソート)

### 行についてデータを整列(ソート;2変数)する ### sortlist <- order(第1変数, 第2変数)

> sortlist <- order(x$GROUP, x$DAY) # 順番を取得 > X <- x[sortlist,] # 整列 > rownames(X) <- c(1:nrow(X)) # 行番号の整形 > X Cくん B氏 Cくん B氏 Cくん B氏 D女史 Aさん D女史 Aさん D女史 Aさん NAME 71.2 69.8 3 Placebo 58.6 59.0 3 Placebo 70.2 71.2 2 Placebo 59.5 58.1 2 Placebo 71.5 71.3 1 Placebo 58.0 58.5 1 Placebo 59.9 59.8 3 Active 61.5 63.5 3 Active 61.4 61.2 2 Active 64.0 65.8 2 Active 61.7 62.7 1 Active 66.6 65.2 1 Active KG_PM KG_AM DAY GROUP

(59)

59

★ 欠損の扱い(1)

„

手入力でデータフレームを作成する場合で欠損が含

まれているデータを読み込む場合は,ベクトル中の

欠損部分を NA としておけば,該当部分に欠損値

(NA)が入る.

> sex <- c("F",NA,"M"); height <- c(158,162,NA); > weight <- c(51,55,72)

> ( x <- data.frame(SEX=sex, HEIGHT=height, WEIGHT=weight) ) SEX HEIGHT WEIGHT

1 F 158 51 2 <NA> 162 55 3 M NA 72

(60)

60

★ 欠損の扱い(2)

„

ファイルからデータを読み込む場合で欠損が含

まれているデータを読み込む場合は,データ間

がコンマで区切られている方が処理しやすい.

„

この場合,単に欠損部分を空白にしておけば,

該当部分に欠損値(NA)が入る.

x <- read.table("data06.txt", header=T, sep=",") sex height weight

1 F 158 51 2 F 162 55 3 M NA 72 4 M 173 57 5 M 166 64 sex,height,weight F,158,51 F,162,55 M, ,72 M,173,57 M,166,64 data06.txt

(61)

で データハンドリング

参照

関連したドキュメント

事業所や事業者の氏名・所在地等に変更があった場合、変更があった日から 30 日以内に書面での

・条例第 37 条・第 62 条において、軽微なものなど規則で定める変更については、届出が不要とされ、その具 体的な要件が規則に定められている(規則第

借受人は、第 18

年度 H22 H23 H24 H25 H26 H27 H28 H29 H30 H31 2010 2011 2012 2013 2014 2015 2016 2017 2018

 ・ ナンバープレートを破損、紛失したとき   ・ 住所、氏名、定置場等に変更があったとき  ・

章番号 ページ番号 変更後 変更前

章番号 ページ番号 変更後 変更前 変更理由.. 1 補足説明資

章番号 ページ番号 変更後 変更前