R:エクセルから読み込んだデータフレームの行名を変更しようとしてハマる
はじめに
Rで(R studioで)エクセルからワークシートを読み込み、行名を変更しようとして手間取ったので、記事にしました。R studioのimport Dataset/From Excelでも、同手順です。
概要
read_excelで読み込んだオブジェクトの型は、data.frameではなく、tibbleだった。as.data.frameでdata.frame型に変換すると、row.names()関数で行名を変更できた。
内容
rのreadxlパッケージを使い、エクセルからread_excelでデータを読み込んで、一列目の内容を行名に設定しようとしたところ、警告を受けました。
df <- read_excel("xxx.xlsx, sheet="Sheet1")
row.names(df) <- t(df[,1])
setting row names on a tibble is deprecared.
この状態でも、dfの行名は、一列目の内容通りに変更できたのですが、続いて、このdfから列を抽出するといった操作を加え、新たな名前でdata.frameを作成すると、行名が連番に戻ってしまいました。
read_excelで読み込んだオブジェクト dfは、型が data.frameではなく、tibbleだから、ということのようです。
しかしdfがdata.frameかどうか、is.data.frame()で確認すると、data.frameだとの答えが返ってきます。
is.data.frame(df)
[出力]TRUE
一方、str関数で確認すると、型がtibbleだと判りました。
str(df)
[出力]tibble(以下略)
エクセルからデータを読み込み、行名を変更して取り扱いたい場合などでは、まずオブジェクトの型を明示的にdata.frameへ変換し、以降の操作を加えていく必要があることが判りました。
df <- read_excel("xxx.xlsx, sheet="Sheet1")
df <- as.data.frame(df)
row.names(df) <- t(df[,1])
まとめ
tibbleでの行名の変更は非推奨らしいので、型をdata.frameにすることで解決。is.data.frameではTrueが返ってくるので、判りにくかった。
Discussion