😺

R:エクセルから読み込んだデータフレームの行名を変更しようとしてハマる

2022/07/07に公開

はじめに

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