第2章 変数の選択

ここではTriangulating Peaceのレプリケーションデータを使用します。

library(tidyverse)
tri <- read.csv("data/triangle.csv")

2.1 変数名による選択

特定の変数をベクトルとして抜き出したい場合はオブジェクト名と変数名の間に$を入れます。 例えば、yearだけを抜き出したい場合は次のようにします。

head(tri$year)
## [1] 1920 1921 1922 1923 1924 1925

データセットとして抜き出す場合は、オブジェクト名の後に[]をつけて、その中に変数名をクオーテーションマーク"で囲んで入れます。

head(tri["year"])

複数の変数を指定する場合はc()で変数名のベクトルを作って指定します。 例えば、stateastatebyearを抜き出したい場合は次のようにします。

head(tri[c("statea", "stateb", "year")])

tidyversedplyrというパッケージではselect()によって変数の選択ができます。 例えば、statea, stateb, yearを選択するには次のようにします。

tri %>% 
  select(statea, stateb, year) %>% 
  head()

なお、%>%はパイプ演算子と呼ばれるもので、tidyverseの機能の一つです。 その意味についてはこちらを参照して下さい。

変数を除外する場合は-をつけます。

tri %>% 
  select(-year) %>% 
  head()

selectでは変数の並び替えもできます。

tri %>% 
  select(year, statea, stateb) %>% 
  head()

変数の選択をせずに並び替えだけしたい場合は、並び替えた後にeverything()を入れます。

tri %>% 
  select(year, statea, stateb, everything()) %>% 
  head()

2.2 番号による選択

列番号を指定することで選択することもできます。 番号がひとつだけの場合はベクトルになります。

head(tri[,3])
## [1] 1920 1921 1922 1923 1924 1925

複数列を指定するとデータフレームとして抜き出します。

head(tri[,c(1,2,3)])

-を付けるとその列を除外します。

head(tri[,-3])

2.3 変数名の変更

変数名を確認するにはnames()を使います。

names(tri)
##  [1] "statea"   "stateb"   "year"     "dependa"  "dependb"  "demauta" 
##  [7] "demautb"  "allies"   "dispute1" "logdstab" "lcaprat2" "smigoabi"
## [13] "opena"    "openb"    "minrpwrs" "noncontg" "smldmat"  "smldep"  
## [19] "dyadid"

names()に代入することで変数名を買えることができます。 例えば、stateaStateAにするには次のようにします。

names(tri)[1] <- "StateA"
names(tri)
##  [1] "StateA"   "stateb"   "year"     "dependa"  "dependb"  "demauta" 
##  [7] "demautb"  "allies"   "dispute1" "logdstab" "lcaprat2" "smigoabi"
## [13] "opena"    "openb"    "minrpwrs" "noncontg" "smldmat"  "smldep"  
## [19] "dyadid"
  • names()ベクトルなので第1要素を参照するには[1]とします。

あるいは、次のようにしてstatebStateBにすることもできます。

names(tri)[names(tri) == "stateb"] <- "StateB"
names(tri)
##  [1] "StateA"   "StateB"   "year"     "dependa"  "dependb"  "demauta" 
##  [7] "demautb"  "allies"   "dispute1" "logdstab" "lcaprat2" "smigoabi"
## [13] "opena"    "openb"    "minrpwrs" "noncontg" "smldmat"  "smldep"  
## [19] "dyadid"

tidyverseで変数名を変える場合はselect()内部で=の左側に新しい変数名、右側にもとの変数名を書きます。

tri %>% 
  select(statea = StateA, stateb = StateB, year) %>% 
  head()

変数名を変えるだけで変数の選択をしない場合はrename()を使います。

tri %>% 
  rename(statea = StateA, stateb = StateB) %>% 
  head()

2.4 高度な変数の選択方法*