R のデータフレームで数値要素だけ抽出

データフレームの相関行列を作成するときに文字列要素が邪魔なので、
数値データ以外を除去する方法をまとめます。

dplyr パッケージを用いて

dplyr::select_if(データセット名, is.numeric)

で数値列のみを抽出できます。

今回 iris データセットを用います。

> data(iris)
> head(iris, n=5)
  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

ここで、cor() で相関行列を計算しようとしても

> cor(iris)
 cor(iris) でエラー:  'x' は数値でなければなりません 

となりできません。

そこで、 dplyr パッケージ のselect()を用いて、 iris データセットの文字列要素からなる Species 列以外を抽出します。

> library(dplyr)
> iris.num = dplyr::select_if(iris, is.numeric)
> head(iris.num, n=5)
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1          5.1         3.5          1.4         0.2
2          4.9         3.0          1.4         0.2
3          4.7         3.2          1.3         0.2
4          4.6         3.1          1.5         0.2
5          5.0         3.6          1.4         0.2
> cor(iris.num)
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000

これで OK です。