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