R logo

Rのrownames()関数は、データフレームや行列(matrix)の行名(row names)を取得または設定するための関数。

基本的な使い方

行名を取得する

rownames(データフレームまたは行列)

例:

df <- data.frame(A=1:3, B=c("X", "Y" , "Z" ))
rownames(df) # 行名を取得
output
[1] "1" "2" "3"

※ デフォルトでは行名はインデックス(1, 2, 3, ...)が文字列として自動的に付けられる。

行名を設定する

rownames(データフレームまたは行列) <- 新しい行名ベクトル

例:

df <- data.frame(A=1:3, B=c("X", "Y" , "Z" ))
rownames(df) <- c("row1", "row2" , "row3" ) # 行名を指定

df
output
     A B
row1 1 X
row2 2 Y
row3 3 Z

※ 行名ベクトルは、データフレームや行列の行数と一致する必要がある。

rownames()を使って手動で行名をつけると、デフォルトの数値インデックスは上書きされる。

行名を削除する

rownames(データフレームまたは行列) <- NULL

例:

df <- data.frame(A = 1:3, B = c("X", "Y", "Z"))
rownames(df) <- c("row1", "row2", "row3")  # 行名をつける
rownames(df) <- NULL  # 行名を削除

df
output
    A B
1 1 X
2 2 Y
3 3 Z

NULLを指定すると、行名は自動的な数値インデックス(1, 2, 3, ...)に戻る。

row.names() との違い

  • rownames():行名を取得または設定するための便利な関数。
  • row.names()rownames()と同様に動作するけど、主にdata.frame()の引数として使用されることが多い。
df <- data.frame(A=1:3, B=c("X", "Y" , "Z" ), row.names=c("row1", "row2" , "row3" ))

df
output
        A B
row1 1 X
row2 2 Y
row3 3 Z

使用例いろいろ

行名を使ったデータのアクセス

行名を使って、特定の行を抽出する。

df <- data.frame(A=1:3, B=c("X", "Y" , "Z" ))
rownames(df) <- c("row1", "row2" , "row3" )
df["row2", ] # "row2" の行を抽出
output
        A B
row2 2 Y

行名で条件検索

行名が特定の条件を満たす行を抽出する。

df <- data.frame(A=1:3, B=c("X", "Y" , "Z" ))
rownames(df) <- c("a", "b" , "c" ) # 行名が "b" に一致する行を取得
df[rownames(df)=="b" , ]
output
    A B
row2 2 Y

まとめ

rownames()の使い分けをまとめると、以下のような感じ。

操作 構文 効果
行名の取得 rownames(df) データフレームの行名を取得
行名の設定 rownames(df) <- c("A", "B", "C") データフレームの行名を "A", "B", "C" に設定
行名の削除 rownames(df) <- NULL データフレームの行名を削除して、デフォルトの数値インデックスに戻す

注意点

  1. 行名は文字ベクトルとして管理される。数値ではなく、文字列のように扱われる。
  2. Rでは重複した行名も許容されるけれども、重複があるとアクセス時に注意が必要。できるだけ重複しない行名にする。
  3. 行名は、NAを含むことはできない。