Rでデータの選択 ーsubset関数, filter関数などー

データの選択は、データ解析の基本的な操作の一つであり、特定の条件に基づいてデータセットから必要な情報を抽出することができます。
この記事では、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)と同じデータを返す

いろいろな選択手法を紹介しました。




コメント

タイトルとURLをコピーしました