14
14

More than 5 years have passed since last update.

【R】データフレームをただの行列に変換したい

Last updated at Posted at 2018-04-12

やりたいこと

データフレームのオブジェクトを matrix() で生成されたようなただの行列に変換したい。単に as.matrix() するだけじゃなくて、行や列の名前も無い行列にしたい。こんな風に。

変換前
# 適当に iris[1:10, 1:4] したやつ
   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
6           5.4         3.9          1.7         0.4
7           4.6         3.4          1.4         0.3
8           5.0         3.4          1.5         0.2
9           4.4         2.9          1.4         0.2
10          4.9         3.1          1.5         0.1
変換後
      [,1] [,2] [,3] [,4]
 [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
 [6,]  5.4  3.9  1.7  0.4
 [7,]  4.6  3.4  1.4  0.3
 [8,]  5.0  3.4  1.5  0.2
 [9,]  4.4  2.9  1.4  0.2
[10,]  4.9  3.1  1.5  0.1

以降、 hoge は変換したい何らかのデータフレームオブジェクト。

hogeの例
hoge <- iris[1:10, 1:4]

その1からその3まで、それぞれ別々の方法を書いてみる。

その1 matrix() を使う

まずは、素朴に matrix() を用いる方法。 matrix() の第一引数は勝手にベクトルにしてくれるので、 as.vector(as.matrix(hoge)) とかを渡さなくてもよい。

hoge <- matrix(as.matrix(hoge), nrow(hoge), ncol(hoge))

また、データフレームは転置すると行列型になる(記事の最後に参考URL)ので、以下のような書き方もできる。

hoge <- matrix(t(hoge), nrow(hoge), ncol(hoge), byrow = T)

その2 apply() を使う

apply(hoge, 1, as.numeric) 1回のみの場合、列の名前が残って転置されたものが返ってくるので、もう一度転置している。

hoge <- apply(apply(hoge, 1, as.numeric), 1, as.numeric)

その3 名前を落とす

行と列、それぞれの名前を落とす例。
これでどちらか片方だけ名前を落とすこともできる。

hoge <- as.matrix(hoge)
colnames(hoge) <- NULL
rownames(hoge) <- NULL

あるいは、行と列一括で名前を落とす例。

hoge <- as.matrix(hoge)
dimnames(hoge) <- NULL

あるいは、一括で落とす例の別の書き方。

hoge <- as.matrix(hoge)
hoge <- unname(hoge)

参考

Rでデータフレームを転置すると行列になる
R 行列Tips大全

14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14