データの選択は、データ解析の基本的な操作の一つであり、特定の条件に基づいてデータセットから必要な情報を抽出することができます。
この記事では、Rを用いてデータの選択を行う方法について紹介します。
具体的には、irisデータセットを例に挙げ、列や行を指定してデータを選択する方法や、特定の条件を満たすデータを選択する方法について解説します。

データの選択は、データ解析の初心者から上級者まで広く使用されますので、ぜひ参考にされてください。
1. データの選択① 列や行を指定
irisのデータセットを使って、特定の列や行を選択する方法を紹介します。
個別の(不連続な)列や行を選択する方法、連続した列や行を選択する方法などがあります。
head(iris) #irisのデータを6行目まで表示
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
#6 5.4 3.9 1.7 0.4 setosa
iris_c1 <- iris[, c("Sepal.Length", "Species")] # 特定の列("Sepal.Length", "Species")を選択(不連続な列の指定)
## 参考 iris_c1 <- iris[, c(1,5)]で同じデータを返す
## 参考 不連続な列や行の指定で、c()を使用
head(iris_c1) #iris_cのデータを6行目まで表示
# Sepal.Length Species
#1 5.1 setosa
#2 4.9 setosa
#3 4.7 setosa
#4 4.6 setosa
#5 5.0 setosa
#6 5.4 setosa
iris_r1 <- iris[1:10, ] # 特定の行(10行目まで)を選択(連続した行の指定)
## 参考 selected_iris_r2 <- iris[c(1,5), ] 特定の不連続な行(1行目と5行目)を選択
iris_r1
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
#6 5.4 3.9 1.7 0.4 setosa
#7 4.6 3.4 1.4 0.3 setosa
#8 5.0 3.4 1.5 0.2 setosa
#9 4.4 2.9 1.4 0.2 setosa
#10 4.9 3.1 1.5 0.1 setosa
iris_c1r1 <- iris[1:10, c("Sepal.Length", "Species")] # 特定の列と行を選択
data2<-data[行への選択指示, 列への選択指示]のような構成で、データを選択できます。
列や行が不連続な選択の場合は、上記のようにc()を用いて、個別に列や行の名前や番号を指定してください。
2. データの選択② 列の性質を指定(subset関数, filter関数など)
例えば、多くのデータの中からこういう性質のデータを選択したい、という場合があると思います。
今回は、その中で「A.特定の列の数値を指定して、データを選択」あるいは、「B.特定の列のカテゴリーを指定して、データを選択」について、紹介します。
-subset関数での選択
# A.特定の列の数値を指定して、データを選択
s_iris_SL5o <- subset(iris, Sepal.Length > 5) # Sepal.Lengthが5より大きい行を選択
head(selected_data)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#6 5.4 3.9 1.7 0.4 setosa
#11 5.4 3.7 1.5 0.2 setosa
#15 5.8 4.0 1.2 0.2 setosa
#16 5.7 4.4 1.5 0.4 setosa
#17 5.4 3.9 1.3 0.4 setosa
s_iris_SL5 <- subset(iris, Sepal.Length == 5.1) # Sepal.Lengthが5.1の行を選択
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#18 5.1 3.5 1.4 0.3 setosa
#20 5.1 3.8 1.5 0.3 setosa
#22 5.1 3.7 1.5 0.4 setosa
#24 5.1 3.3 1.7 0.5 setosa
#40 5.1 3.4 1.5 0.2 setosa
#45 5.1 3.8 1.9 0.4 setosa
#47 5.1 3.8 1.6 0.2 setosa
#99 5.1 2.5 3.0 1.1 versicolor
## 参考 5以上の行は Sepal.Length>=5、5以下の行は Sepal.Length<=5
# B.特定の列のカテゴリーを指定して、データを選択
s_iris_virg <- subset(iris, Species == "virginica") # Speciesがvirginicaの行を選択
head(s_iris_virg)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#101 6.3 3.3 6.0 2.5 virginica
#102 5.8 2.7 5.1 1.9 virginica
#103 7.1 3.0 5.9 2.1 virginica
#104 6.3 2.9 5.6 1.8 virginica
#105 6.5 3.0 5.8 2.2 virginica
#106 7.6 3.0 6.6 2.1 virginica
# AとBを共に実施
s_iris_SL5o_virg <- subset(iris, Sepal.Length > 5 & Species == "virginica")
subset関数は、Rの中にある関数ですので、パッケージを呼び出さずに、すぐにコードの使用が可能です。
-filter関数での選択
library(dplyr) #filter関数はdplyrのパッケージ内にある。
f_iris_SL5o_virg <- filter(iris, Sepal.Length > 5, Species == "virginica")
head(f_iris_SL5o_virg)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 6.3 3.3 6.0 2.5 virginica
#2 5.8 2.7 5.1 1.9 virginica
#3 7.1 3.0 5.9 2.1 virginica
#4 6.3 2.9 5.6 1.8 virginica
#5 6.5 3.0 5.8 2.2 virginica
#6 7.6 3.0 6.6 2.1 virginica
## 参考 f_iris_SL5o_virg <- filter(iris, Sepal.Length > 5 & Species == "virginica") 同じ結果を返す
filter関数もsubset関数と同様の作業ができます。
dplyrパッケージ内の他の関数も合わせて使用したいときは、filter関数を使用すると連続的に処理ができて、便利です。
-その他の選択
iris_virg <- iris[iris$Species == "virginica", ]
## 参考 s_iris_virg <- subset(iris, Species == "virginica")と同じデータを返す
## 参考 f_iris_virg <- filter(iris, Species == "virginica")と同じデータを返す
iris_SL5o <- iris[(iris$Sepal.Length >= 5), ]
## 参考 s_iris_SL5o <- subset(iris, Sepal.Length >= 5)と同じデータを返す
## 参考 f_iris_SL5o <- filter(iris, Sepal.Length >= 5)と同じデータを返す
いろいろな選択手法を紹介しました。
コメント