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

„ データフレームの作成

N/A
N/A
Protected

Academic year: 2021

シェア "„ データフレームの作成"

Copied!
61
0
0

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

全文

(1)

で データハンドリング

~ データフレーム 30 分クッキング ~

(2)

2

本日のメニュー

„ データフレームとは ←

„ データフレームの作成

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

height

Density

0.000.05 0.100.15 0.200.25

60 65 70 75 80

Bass 2 Bass 1

Tenor 2

0.000.05 0.100.15 0.200.25

Tenor 1

0.000.05 0.100.15 0.200.25

Alto 2 Alto 1

Soprano 2

60 65 70 75 80

0.000.05 0.100.15 0.200.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 ファイルを読み込む

> x <‑ read.xport("C:/mydata.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)

で データハンドリング

~ データフレーム 30 分クッキング ~

(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 の場合

別名で保存

CSV(カンマ区切り)で保存

(42)

42

★ テキストファイル ⇔ EXCEL

„ Mac OS X 版 R の場合

別名で保存

CSV(カンマ区切り)で保存

(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)

„ パッケージ XMLSASXML を使用する

( 作者: 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

;

proc copy in=work out=xxx ; select demo ; run;

(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)

で データハンドリング

参照

関連したドキュメント

準備:データ「 DEP」の読み込み

この Excel ファイルの読み込み機能は、基本的にはこの USDM アドインで自動生成した

byte[] data = File.ReadAllBytes(&#34;test.bin&#34;); // 読み込み File.WriteAllBytes(&#34;testnew.bin&#34;, data); // 書き込み

プログラミング入門2 7 ファイルを開く ~ fopen関数  データを読み込む対象の ”ファイル名” を指定

□ 権限 スクリプトソースアクセス : スクリプトソースへのアクセス可/不可を選択。 読み取り : ファイルの読み取り可/不可を選択。

データの読み込み 数値・テキストデータの読み込みは以下の関数が用意されている. load ワークスペース内変数を保存した

DIAPRISM/DSF の持つメタデータ(定義情報) を解析するものである。複数のファイルで

#右上の environment に移動し Import Dataset で pcsample を読み込む. #この事例では From Local File で余読み込みは Heading: yes, roname:Use