{{counter}} R !!!R.data {{outline}} !!サンプルデータ *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 ... *グラフにして様子を見る ** plot() !rnorm(個数, 平均, 標準偏差) *ダミーのデータを作り出す。(何か試してみたいときに) *平均と標準偏差を省略して個数だけ指定した場合、平均0、標準偏差1の正規分布データからのランダム抽出 {{pre > 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でもきれいにつりあいの取れたグラフになります。 {{pre > 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))) }} {{ref_image hist-rnorm40.png}} !!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) *何行何列あるか調べる <> {{pre > dim(fragE11) [1] 19282 10 }} 19282行・10列あることがわかる。 !!事前にデータを作っておく *表計算ソフトなどで、テキストファイル(タブ区切りやCSV)で保存しておく。 *一件一行 *一番上の行は、変数名 *欠損値は NA と記入しておく *ファイルの読み込み **データフレーム名 <- read.table(choose.files()) **これでウインドウが開くのでどのファイルを読み込むか指定する !エクセルから「コピペ」することもできる +エクセル上でデータを一覧にしておく ++一番上の行は見出しとして行名を入れておく。これがRでも使われるので、簡潔な記号にしておくのがよい。 +取り入れたいデータ部分をマウスでドラッグして選び、Ctrl+Cとかでコピーする。 +ウィンドウをRに切り替えて、 +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(データフレーム名, 条件) *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のカラムだけを取り出す。 !!データの一部(特定のカラム)を取り出す <> *いくつものカラムが並ぶデータの特定のカラムだけを使いたい場合 **連続していれば、データフレーム[,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()命令で保存する。 {{pre install.packages("tidyverse") library(dplyr) wirte_excel_csv(データ名, "output.csv") }} !!データの操作 !変数を縦につなげる rbind(変数1, 変数2) !変数を横につなげる cbind() !!データを縦横に一連の同じ処理をする <> !行単位で処理(二つ目の引数 1):たとえば、平均点を出す apply(x, 1, 関数) !列単位で処理(二つ目の引数 2):たとえば、総合点を出す apply(x, 2, 関数) !一部の列だけを集計して合計の列を付け足す <> *2列目から9列目を足して、totalの列を右端に付け足す {{pre > 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に変換 {{pre > 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 ---- *data.matrix() もある。 !!行列を入れ替える: t関数 {{pre > 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/