トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

R.data

*disclaimer
29936

29935
R

R.data


 サンプルデータ

  • Rをインストールした時点で、サンプルデータもインストールされている。
    • data() で一覧表示される。

  • どんなデータか、その概要を知る
    • str() でデータの概要が表示される
> str(kimatsu)
'data.frame':   18 obs. of  2 variables:
 $ kokugo : num  83 45 73 50 22 67 77 89 66 90 ...
 $ suugaku: num  90 55 90 43 33 55 48 98 56 75 ...

  • グラフにして様子を見る

rnorm(個数, 平均, 標準偏差)

  • ダミーのデータを作り出す。(何か試してみたいときに)
  • 平均と標準偏差を省略して個数だけ指定した場合、平均0、標準偏差1の正規分布データからのランダム抽出
> rnorm(10)
 [1]  1.4364014 -0.5077639  0.3058840  0.1259501 -1.1296745  0.3292148
 [7]  0.9260699 -0.6915141 -1.8044824 -1.1223909
> rnorm(10)
 [1]  2.49496685  0.59830372  0.32473479  0.74853727 -1.52421661  0.98082241
 [7]  0.91520576  1.19348810  0.27119494 -0.08119991
> rnorm(10)
 [1]  0.28923196  0.59616551 -0.20413144 -0.03034469 -0.19886301  0.33546843
 [7] -0.31893659 -0.28439913 -0.58158149 -0.68247953
> rnorm(10)
    • 平均50で、標準偏差10のデータを40人分
      • やってみてヒストグラム作るとわかりますが、40人程度では、ランダムだと、「え、これが」と思われるような分布になります。400でもまだまだ、4000になるとまあまあ、40000だとかなり安定した正規分布になりますね。
      • 同じグラフでも、boxplotだと、40でもきれいにつりあいの取れたグラフになります。
> rnorm(40, 50, 10)
 [1] 54.92133 52.74849 53.63346 54.34087 63.92496 48.14784 53.24380 51.89087 46.62319
[10] 33.08571 37.38375 69.22399 57.46107 59.48568 44.48870 52.82696 35.83338 62.21806
[19] 52.94664 39.54044 49.31500 45.00038 60.97926 51.26191 41.98686 29.47495 41.15922
[28] 55.83927 70.17838 63.72457 43.71194 52.10943 45.59285 59.61884 41.72390 47.07231
[37] 50.06059 54.59948 48.93411 48.99457
> hist((rnorm(40, 50, 10)))

 Rで扱うデータの種類

  • 図でわかりやすい ↓

https://cell-innovation.nig.ac.jp/surfers/vector_difference.html

ベクトル

  • プログラミングで言う「配列」
  • 「変数名」をつける
  • 要素が入っている
  • 変数名 <- c(要素をカンマで区切って並べる)
    • 例:国語と数学の得点
    • kokugo <- c(83, 45, 73, 50, 22)
    • suugaku <- c(90, 55, 90, 43, 33)
  • 要素は前から順番に位置が決まっている
  • 変数名をタイプすると内容が表示される
> kokugo
[1] 83 45 73 50 22

データフレーム

  • プログラミングで言う「多次元配列」
  • 行が項目
  • 列が測定値
  • 複数のベクトルを合わせてデータフレームを作ることもできる
  • 変数名 <- data.frame(ベクトル名をカンマで区切って並べる)
    • 例:期末試験の得点(国語と数学)
    • kimatsu <- data.frame(kokugo, suugaku)
  • 変数名をタイプすると内容が表示される
>kimatsu

  kokugo suugaku
1     83      90
2     45      55
3     73      90
4     50      43
5     22      33

  • 個々のベクトルを指定するときは $ を使う
    • 国語の得点 kimatsu$kokugo
    • 数学の得点 kimatsu$suugaku

  • 逆に、あるデータフレームの特定の列を取り出して、別のデータフレームにする
icnaleMLS.MLT <- data.frame(icnale$MLS, icnale$MLT)

  • 何行何列あるか調べる dim()
> dim(fragE11)
[1] 19282    10

19282行・10列あることがわかる。

  • カラム名を確認 names()
> names(ToothGrowth)
[1] "len"  "supp" "dose"

 事前にデータを作っておく

  • 表計算ソフトなどで、テキストファイル(タブ区切りやCSV)で保存しておく。
  • 一件一行
  • 一番上の行は、変数名
  • 欠損値は NA と記入しておく
  • ファイルの読み込み
    • データフレーム名 <- read.table(choose.files())
    • これでウインドウが開くのでどのファイルを読み込むか指定する

エクセルから「コピペ」することもできる

  1. エクセル上でデータを一覧にしておく
    1. 一番上の行は見出しとして行名を入れておく。これがRでも使われるので、簡潔な記号にしておくのがよい。
  2. 取り入れたいデータ部分をマウスでドラッグして選び、Ctrl+Cとかでコピーする。
  3. ウィンドウをRに切り替えて、
  4. Rのコンソールで以下の命令を打って、実行(エンターキーを押す)。
データフレーム名 <- read.delim("clipboard")
もしくは、
データフレーム名 <- read.table("clipboard", header=T)
  • データフレーム名は、Rの中でのデータの名前
  • 見出しの有り無しのデフォルトが、read.delimとread.tableで違うので注意
  • 見出しの一部を変更するには、要素番号で見出しを指定して上書きする。
> names(KSL)[3] <- "SL"
    • KSLというデータの3番目の見出しをSLに変更する例

テキストファイル読み込み


    • 一文一行ずつ読み込んで全体はベクトル。一文一行が一要素。
x <- readLines(choose.files())

x <- scan(choose.files(), what="char", sep="\n")

要素の比較 %in%

x %in% y

 データの一部(サブセット)を取り出す:条件に当てはまるものだけを選ぶ

subset()

subset(データフレーム名, 条件)

  • or 条件は |
  • and条件は &
  • 文字のマッチは =="文字"


文長が4以上: SL >= 4
文長が4以上14以下: SL >=4 & SL <= 14

該当するデータの特定の列だけを出力


subset(データフレーム名, 条件, 出力列)

  • 出力列の例
select = c(MHD, MDD)

KSL.sub <- subset(KSL, SL >=4 & SL <= 14, select = c(SL, MHD, MDD))
    • 文長が4以上14以下に該当するデータのうち、SLとMHDとMDDのカラムだけを取り出す。

 データの一部(特定のカラム)を取り出す

data.frame()

  • いくつものカラムが並ぶデータの特定のカラムだけを使いたい場合
    • 連続していれば、データフレーム[,2:4] とすれば、2列目から4列目だけを取り出せる
    • 非連続している場合は、data.frame()で、カラム名を指定して取り出す
data.frame(x$ID, x$age, x$score)

 ファイルへの書き出し


write(変数, "ファイル名", ncol=列数)

  • データフレームは、write.table()で書き出す。
write.table(データフレーム名, "ファイル名")

write.csv(データフレーム名, "ファイル名.csv")

  • csvファイルをエクセルで読み込む場合
      • エクセルは、デフォルトは日本語文字コードはS-JIS
      • ファイルにBOMという情報が付いていないとS-JISと思って読み込む。ファイルがUTF-8だと文字化ける。
      • BOMをつけてcsvファイル出力するには、tidyverseパッケージの中のdplyrライブラリーを使って write_excel_csv()命令で保存する。
install.packages("tidyverse")
library(dplyr)
wirte_excel_csv(データ名, "output.csv")

 データの操作

変数を縦につなげる

rbind(変数1, 変数2)

変数を横につなげる

cbind()

 データを縦横に一連の同じ処理をする apply()

行単位で処理(二つ目の引数 1):たとえば、平均点を出す

apply(x, 1, 関数)

列単位で処理(二つ目の引数 2):たとえば、総合点を出す

apply(x, 2, 関数)

一部の列だけを集計して合計の列を付け足す rowSums()

  • 2列目から9列目を足して、totalの列を右端に付け足す
> head(fragJA)
          fragment p1c1a p5c2a p2c3a p7c4a p6c5a p3c6a p4c7a p8c8a
1      (NP (PRP ))  1070   656   840  1114  1070   758  1043   970
2            (. .)   815   863   833   814   771   795   841   777
3      (ROOT (S ))   812   858   835   810   771   794   834   770
4 (PP (IN ) (NP ))   950   950   666   703   896   799   761   588
5            (, ,)   640   679   651   642   680   697   673   644
6  (S (NP ) (VP ))   574   597   728   688   620   513   730   615

fragJA$total <- rowSums(fragJA[,2:9])

> head(fragJA)
          fragment p1c1a p5c2a p2c3a p7c4a p6c5a p3c6a p4c7a p8c8a total
1      (NP (PRP ))  1070   656   840  1114  1070   758  1043   970  7521
2            (. .)   815   863   833   814   771   795   841   777  6509
3      (ROOT (S ))   812   858   835   810   771   794   834   770  6484
4 (PP (IN ) (NP ))   950   950   666   703   896   799   761   588  6313
5            (, ,)   640   679   651   642   680   697   673   644  5306
6  (S (NP ) (VP ))   574   597   728   688   620   513   730   615  5065


 個々のオブジェクトをファイルに保存

保存

save(オブジェクト, file="ファイル名.Rdata")

オブジェクトは、複数あってもよい

save(オブジェクト, オブジェクト, オブジェクト, file="ファイル名.Rdata")

読み込み

load("ファイル名.Rdata")

読み込んだ結果、もともとのオブジェクトがもともとのオブジェクト名で復元される。


 読み込むときに別名にしたいとき

保存

saveRDS(オブジェクト, file="ファイル名.rds")

復元

readRDS(file="ファイル名.rds")

別名 <- readRDS(file="ファイル名.rds")

 data.frameから取り出したものをmatrixに変換

> head(fragJ11)
          fragment p1c1a p5c2a p2c3a p7c4a p6c5a p3c6a p4c7a p8c8a p8c1b p4c2b p3c3b p6c4b p7c5b p2c6b p5c7b p1c8b JPtotal
1      (NP (PRP ))  1070   656   840  1114  1070   758  1043   970  1063  1006   837  1218   986   814   628   999   15072
2            (. .)   815   863   833   814   771   795   841   777   879   852   839   815   790   831   821   764   13100
3      (ROOT (S ))   812   858   835   810   771   794   834   770   877   852   831   812   782   832   818   761   13049
4 (PP (IN ) (NP ))   950   950   666   703   896   799   761   588   537   671   831   806   742   717  1001   915   12533
5            (, ,)   640   679   651   642   680   697   673   644   542   582   591   608   639   627   676   662   10233
6  (S (NP ) (VP ))   574   597   728   688   620   513   730   615   625   789   551   677   667   665   551   564   10154
> x <- fragJ11[2,2:17]
> x
  p1c1a p5c2a p2c3a p7c4a p6c5a p3c6a p4c7a p8c8a p8c1b p4c2b p3c3b p6c4b p7c5b p2c6b p5c7b p1c8b
2   815   863   833   814   771   795   841   777   879   852   839   815   790   831   821   764
> class(x)
[1] "data.frame"
> y <- as.matrix(x)
> class(y)
[1] "matrix"
> y
  p1c1a p5c2a p2c3a p7c4a p6c5a p3c6a p4c7a p8c8a p8c1b p4c2b p3c3b p6c4b p7c5b p2c6b p5c7b p1c8b
2   815   863   833   814   771   795   841   777   879   852   839   815   790   831   821   764
> dimnames(y) <- NULL
> y
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16]
[1,]  815  863  833  814  771  795  841  777  879   852   839   815   790   831   821   764
> class(y)
[1] "matrix"


  • 二行目の2から17番目の要素だけ取り出す
x <- fragJ11[2,2:17]
  • マトリックスに変換
y <- as.matrix(x)
  • 見出しにNULLを入れて見出しをなくす
dimnames(y) <- NULL

 行列を入れ替える: t関数

> x <- matrix(1:9, nrow=3, ncol=3)
> x
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> t(x)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

 Box Plot Diagram to Identify Outliers

boxplotと外れ値の説明 ↓ わかりやすい
https://www.whatissixsigma.net/box-plot-diagram-to-identify-outliers/