1 主な内容

第一回ではRの基礎知識(基本操作、オブジェクト)、基本とデータの読み込み(四則演算、パッケージの呼び出し、データの読み込み)、データフレームの整形(様々な関数)について学習します。

1.1 Rの基本

1.2 R言語とは

R言語とは統計解析、グラフの作成などを得意とする言語です。美しいグラフを作成することが可能で、似たようなグラフを繰り返し作成するときなどに非常に便利です。

1.3 Rstudioとは

RstudioとはRを使用するための統合開発環境(IDE: Integrated Development Environment)です。

1.4 Rのインストール

RおよびRstudioのインストールに関しては、別ファイルを参照してください。Rのバージョンによっては動かないパッケージも存在するので、注意してください。 GAMSゼミで設定したように、Rにパスを設定しておくとコマンドプロンプトなどからの操作も可能となりますが、今回は不要です。

1.5 Rstudioの操作

1.6 プロジェクトの作成

Rstudioを起動し、FileのNew Projectから新しいプロジェクトを作成します。GAMSと同様にディレクトリの位置に注意する必要があります。 既に作成済みのプロジェクトを使用する場合は、Open Projectあるいは、エクスプローラーから直接開きます。

1.7 ファイルの作成

プロジェクトを開いた後、実際のコーディングを行うR scriptファイルを作成します。プロジェクトに関連付けておくと開きやすく便利です。

2 基本操作とデータの読み込み

2.1 始める前に

2.1.1 スクリプトの実行方法

すべてを実行する場合は

2.1.2 セクション機能

スクリプトをセクションごとに分割することができる。Ctrl+Shift+Rで新規セクションを追加し、Ctrl+Alt+Tでセクションごとに実行することができる。

2.1.3 .Rdataファイルの保存をオフ

.Rdataファイルの保存をすると再度使用する際に、前回のデータを読み込んでしまい、ミスにつながる可能性がある。Tools>Options>Generalで、Save workspace to RData on exitをNeverにしておくとよい。

2.1.4 文字化け

他人が書いたスクリプトを使用すると、文字化けすることがよくある。エンコードの違いが原因なので、File>Reopen with Encoding…からShift-JISやUTF-8などを選択すると直る。 Tools>Global Options…>Code>Save>Encodingでエンコードをデフォルトで指定しておくとよい。

2.2 基本操作

2.2.1 パッケージと呼び出し

install.packages(パッケージ名)でインストールが可能。インストール方法は別紙参照。library('パッケージ名')でパッケージを呼び出すことができます。 Packagesからチェックで呼び出すことも可能ですが、library()による呼び出しを推奨します。

library(gdxrrw)
library(tidyverse)

2.2.2 四則演算

オブジェクトへの代入が=ではなく<-である点に注意が必要。#でコメントアウトが可能です。

x <- 3            #substitute 3 for x
y <- x      #substitute x for y
y <- y + x**2/4  #substitute y+x^2 for y
x <- 4      #substitute 4 for x


実行後のデータは右上のEnvironmentやコンソールから確認することができます。

y               # Enter y in console
## [1] 5.25

2.2.3 ベクトルの作成

オブジェクトにベクトルを代入してみましょう。ベクトルはc(要素1,要素2,...)のように表現します。

x <- c(1,2,3,4,5)   #make vector x
y <- c(5,4,3,2,1)   #make vector y

(x,y)という座標をプロットして結果を確認してみましょう。

plot(x,y)

2.2.4 データフレームの作成

まずは直接入力してデータフレームを作成してみましょう。ベクトルa,b,c,dを作成します。

a <- c("apple","orange","grape","apple","orange")       #make each vector
b <- c("ringo","mikan","budou","ringo","mikan")         #in Japanese
c <- c(230,110,170,180,90)
d <- c(T,T,T,F,T)


続いて、これらのベクトルを結合することでデータフレームdfを作成します。

df <- data.frame(a,b,c,d)                               #bind each vector
df <- data.frame(name=a,japanese=b,weight=c,damage=d)   #with name


作成したデータフレームを確認するために、view(df),str(df),summary(df)を実行しましょう。view()でデータの確認、str()で型の確認、summary()で各統計量が確認できます。

view(df)          #view data frame
df
name japanese weight damage
apple ringo 230 TRUE
orange mikan 110 TRUE
grape budou 170 TRUE
apple ringo 180 FALSE
orange mikan 90 TRUE
str(df)      #check data type
## 'data.frame':    5 obs. of  4 variables:
##  $ name    : chr  "apple" "orange" "grape" "apple" ...
##  $ japanese: chr  "ringo" "mikan" "budou" "ringo" ...
##  $ weight  : num  230 110 170 180 90
##  $ damage  : logi  TRUE TRUE TRUE FALSE TRUE
summary(df)    #check data information
##      name             japanese             weight      damage       
##  Length:5           Length:5           Min.   : 90   Mode :logical  
##  Class :character   Class :character   1st Qu.:110   FALSE:1        
##  Mode  :character   Mode  :character   Median :170   TRUE :4        
##                                        Mean   :156                  
##                                        3rd Qu.:180                  
##                                        Max.   :230


3 データフレームの整形

3.1 様々な関数

3.1.1 filter/select関数

filter()は特定行を、select()は特定列を抽出する際に使用します。 dfは10都道府県の地域区分、人口、面積に関するデータです。

df
Prefecture Area Population Landarea
Hokkadio Hokkaido 5267762 83424
Miyagi Touhoku 2292385 7282
Tokyo Kantou 13834925 2191
Kanagawa Kantou 9209442 2416
Aichi Chubu 7575530 5172
Kyoto Kansai 2545899 4612
Osaka Kansai 8849635 1905
Hyogo Kansai 5549568 8401
Hiroshima Chugoku 2826858 8479
Hukuoka Kyusyu 5129841 4986


まずはfilter()を使用して、dfから関東、関西、中部地方のデータを抽出してみましょう。 第一引数に対象とするデータ、第二引数に条件式を指定します。

df1 <- filter(df, Area %in% c("Kantou","Kansai","Chubu"))
df1
Prefecture Area Population Landarea
Tokyo Kantou 13834925 2191
Kanagawa Kantou 9209442 2416
Aichi Chubu 7575530 5172
Kyoto Kansai 2545899 4612
Osaka Kansai 8849635 1905
Hyogo Kansai 5549568 8401


続いて、df1から関西以外のデータを抽出してみましょう。

df1 <- filter(df1, Area != "Kansai")
df1
Prefecture Area Population Landarea
Tokyo Kantou 13834925 2191
Kanagawa Kantou 9209442 2416
Aichi Chubu 7575530 5172


最後に東京のみの結果を抽出してみましょう。

df1 <- filter(df1, Prefecture == "Tokyo")
df1
Prefecture Area Population Landarea
Tokyo Kantou 13834925 2191


次はselect()を使用して、df1から県と人口に関するデータを抽出してみましょう。

df1 <- select(df1, Prefecture, Population)
df1
Prefecture Population
Tokyo 13834925



3.1.2 rename関数

rename()は列名を変更する際に使用します。dfの列名をローマ字表記にしてみましょう。“新しい列名”=古い列名の順にように指定します。

df1 <- rename(df,"Jinkou"=Population,"Kenmei"=Prefecture)
df1
Kenmei Area Jinkou Landarea
Hokkadio Hokkaido 5267762 83424
Miyagi Touhoku 2292385 7282
Tokyo Kantou 13834925 2191
Kanagawa Kantou 9209442 2416
Aichi Chubu 7575530 5172
Kyoto Kansai 2545899 4612
Osaka Kansai 8849635 1905
Hyogo Kansai 5549568 8401
Hiroshima Chugoku 2826858 8479
Hukuoka Kyusyu 5129841 4986


3.1.3 パイプ

おなじデータフレームを連続して操作する際、毎回データフレームを指定するのは少し面倒です。 パイプ%in%と呼ばれる機能を使うことで、先ほどまでの操作を非常に簡潔に表現することができます。 この場合、二行目以降ではデータフレームの指定をする必要がありません。

df1 <- filter(df,Area %in% c("Kantou","Kansai","Chubu")) %>%
  filter(Area != "Kansai") %>%                  
  filter(Prefecture == "Tokyo") %>%
  select("Prefecture","Population") %>%
  rename("Jinkou"="Population","Kenmei"="Prefecture")
df1
Kenmei Jinkou
Tokyo 13834925


一行目でデータフレームを代入し、二行目以降でデータフレームの操作を行うという表現でも同様の結果が得られます。df2に神奈川県の人口に関するデータを抽出してみましょう。

df2 <- df %>% 
  filter(Area %in% c("Kantou","Kansai","Chubu")) %>%
  filter(Area != "Kansai") %>%                  
  filter(Prefecture == "Kanagawa") %>%
  select("Prefecture","Population") %>%
  rename("Jinkou"="Population","Kenmei"="Prefecture")
df2
Kenmei Jinkou
Kanagawa 9209442


3.1.4 bind_rows関数

bind_rows()はデータフレームを縦に結合する場合に使用します。東京都の人口データであるdf1と神奈川県の人口データであるdf2を縦に結合してみましょう。

df3 <- bind_rows(df1,df2)
df3
Kenmei Jinkou
Tokyo 13834925
Kanagawa 9209442


3.1.5 mutate関数

mutate()は列の追加、上書き、値や名前の変更等ができる非常に便利な関数です。まずはdfの地域に関する列を東日本と西日本の区分に上書きし、人口密度に関する列を追加してみましょう。

df4 <- df %>%
  mutate(Area = recode(Area,Hokkaido="East",
                       Touhoku="East",
                       Kantou="East",
                       Chubu="West",
                       Kansai="West",
                       Chugoku="West",
                       Kyusyu="West")) %>% 
  mutate(Density = Population/Landarea)
df4
Prefecture Area Population Landarea Density
Hokkadio East 5267762 83424 63.14444
Miyagi East 2292385 7282 314.80157
Tokyo East 13834925 2191 6314.43405
Kanagawa East 9209442 2416 3811.85513
Aichi West 7575530 5172 1464.71964
Kyoto West 2545899 4612 552.01626
Osaka West 8849635 1905 4645.47769
Hyogo West 5549568 8401 660.58422
Hiroshima West 2826858 8479 333.39521
Hukuoka West 5129841 4986 1028.84898


mutate()と似た関数にtransmute()があります。transmute()は新規に作成した行のみを返すので、残したい列がある場合は指定する必要があります。

df4 <- df %>%
  mutate(Area = recode(Area,Hokkaido="East",
                       Touhoku="East",
                       Kantou="East",
                       Chubu="West",
                       Kansai="West",
                       Chugoku="West",
                       Kyusyu="West")) %>% 
  transmute(Prefecture, Density = Population/Landarea)
df4
Prefecture Density
Hokkadio 63.14444
Miyagi 314.80157
Tokyo 6314.43405
Kanagawa 3811.85513
Aichi 1464.71964
Kyoto 552.01626
Osaka 4645.47769
Hyogo 660.58422
Hiroshima 333.39521
Hukuoka 1028.84898



3.2 Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.