Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

Rの初歩 - 基本操作

確率・統計の復習がてら、Rにも習熟しようと思いたった。このエントリーでは次の話題を取り扱う。

  1. R環境の準備:RとRStudioのインストールする。
  2. ライブラリの導入:Excelの読み込みと、基本的な関数の使用を実現する。
  3. Excelの読み込み操作。
  4. 基本的な操作
  5. グラフの描画と重ね合わせ

このエントリーでは、4を取り上げる。
1-3の話題は次のエントリを参照する。
Rの初歩 - 環境設定 - Technically Impossible

まず参考資料。RStudioのサイトでは様々な早見表が用意されている。Base Rが今回の話題に関連するので、事前に参照するとよい。
www.rstudio.com

4.基本的な操作

前エントリーで読み込んだweek3には3列のデータが含まれている。
f:id:espio999:20180214115707p:plain

week3を表示すると、3列すべてのデータが表示される。特定の列のみを表示するには、$を用いて列名を指定する。

> print(week3)
# A tibble: 100 x 3
   `Client No`   Age Sales
         <dbl> <dbl> <dbl>
 1         204  23.0  1531
 2         377  61.0 11780
 3         406  39.0  4177
 4         521  56.0  9897
 5         564  40.0  2133
 6         703  31.0  1759
 7         781  21.0  1313
 8        1080  33.0  2123
 9        1117  47.0  2520
10        1345  46.0  2533
# ... with 90 more rows
> print(week3$Age)
  [1] 23 61 39 56 40 31 21 33 47 46 37 23 34 57 39 55 23 63 30 31 50 54 31 25 69 41 57
 [28] 42 34 43 30 24 70 36 37 52 64 43 38 61 30 65 30 45 31 31 63 56 22 60 31 31 59 75
 [55] 31 30 59 71 27 57 55 48 32 22 46 53 31 67 30 58 54 31 49 60 30 51 62 28 28 58 42
 [82] 31 31 68 58 31 39 31 31 26 35 30 44 21 55 72 66 73 31 52
> print(week3$Sales)
  [1]  1531 11780  4177  9897  2133  1759  1313  2123  2520  2533  3260  1299  2555
 [14] 12000  3528  5321  1265  1821  2090  2177  4443 10651  2241  1644  2899  2654
 [27] 12900  1800  4047  2356  2154  1423  3370  3144  2565  5909  5222  1987  2232
 [40]  7838  2266  6872  2378  2424  1908  2100  2560 12500  1432 11980  1790  1905
 [53] 10900  1738  1759  2230 12350  3740  1678 12300  6908  2339  2209  1154  2111
 [66]  8314  2178 13916  1908 11650  6655  2189  3663 12600  1809  4739  6544  2133
 [79]  1987 12000  3200  1759  2250  2639 11900  1978  2989  2245  2165  1788  2987
 [92]  1455  2088  1222  7898  2927 10803  3986  2090  4344

特定列だけを取り出し、異なる変数に代入することもできる。

> vct_age=week3$Age
> print(vct_age)
  [1] 23 61 39 56 40 31 21 33 47 46 37 23 34 57 39 55 23 63 30 31 50 54 31 25 69 41 57
 [28] 42 34 43 30 24 70 36 37 52 64 43 38 61 30 65 30 45 31 31 63 56 22 60 31 31 59 75
 [55] 31 30 59 71 27 57 55 48 32 22 46 53 31 67 30 58 54 31 49 60 30 51 62 28 28 58 42
 [82] 31 31 68 58 31 39 31 31 26 35 30 44 21 55 72 66 73 31 52

取得データのサマリーを確認するには、summary関数を用いる。

> summary(week3)
   Client No         Age            Sales      
 Min.   : 204   Min.   :21.00   Min.   : 1154  
 1st Qu.:2864   1st Qu.:31.00   1st Qu.: 1987  
 Median :5536   Median :40.50   Median : 2472  
 Mean   :5341   Mean   :43.54   Mean   : 4331  
 3rd Qu.:7830   3rd Qu.:57.00   3rd Qu.: 5247  
 Max.   :9921   Max.   :75.00   Max.   :13916  

summary関数に含まれていない値を確認するには、個別の関数を用いることになる。例えばweek3$Ageの標準偏差、分散、尖度、歪度を求めるには、

> library("e1071", lib.loc="~/R/win-library/3.4")
> x=week3$Age
> sd(x)
[1] 14.9986
> var(x)
[1] 224.958
> kurtosis(x)
[1] -1.190913
> skewness(x)
[1] 0.3343025

関数kurtosis、skewnessはライブラリe1071が必要なので、事前にライブラリを読み込んでいる。

関数の作成

繰り返し利用する処理を切り出して関数化するのは、そのほかのプログラム同様、Rでも通用する。
Rには最頻値を求める関数がないため、自前の関数を作成してみる。

> myMode=function(x){
+     return(names(which.max(table(x))))
+ }
> myMode(week3$Age)
[1] "31"

R標準のsummary関数は、私の求めているものと異なるため、オリジナルのsummary関数を作成してみる。
各関数の値を列記すると同時に、そのタイトルをmyLabelに定義して、挿入している。先に作成した最頻値の関数も呼び出している。

mySummary=function(x) {
  myLabel = c(
    "Mean",
    "Median",
    "Mode",
    "Standard deviation",
    "Standard error",
    "Variance",
    "Kurtosis",
    "Skewness",
    #"Range",
    "Min",
    "Max",
    "Total",
    "Length"
  )
  
  myVal=c(
    mean(x),
    median(x),
    myMode(x),
    sd(x),
    sd(x)/sqrt(length(x)),
    var(x),
    kurtosis(x),
    skewness(x),
    #range(x),
    min(x),
    max(x),
    sum(x),
    length(x)
  )
  
  names(myVal) = myLabel
  print(myVal)
}

このように実行される。

> mySummary(week3$Age)
               Mean              Median                Mode  Standard deviation 
            "43.54"              "40.5"                "31"   "14.998599261197" 
     Standard error            Variance            Kurtosis            Skewness 
  "1.4998599261197"   "224.95797979798" "-1.19091344797837" "0.334302512910519" 
                Min                 Max               Total              Length 
               "21"                "75"              "4354"               "100" 

次のエントリーで、読み込んだデータをもとにグラフを描画し、複数のグラフを重ね合わせてみる。
impsbl.hatenablog.jp