42. データへのアクセス方法


データへのアクセス方法

まず,たたき台となるデータフレーム x を作成する.

 
 ID     <- 1:5
 sex    <- c("F","F","M","M","M")
 height <- c(158,162,177,173,166)
 weight <- c(51,55,72,57,64)
 ( x    <- data.frame(SEX=sex, HEIGHT=height, WEIGHT=weight) )

 データフレーム x

  ID SEX HEIGHT WEIGHT
1  1   F    158     51
2  2   F    162     55
3  3   M    177     72
4  4   M    173     57
5  5   M    166     64

このデータフレーム x にアクセスする方法を紹介する.

コマンド

機能

x$列名,x["列名"],x[["列名"]]

列データ(例えば SEX や WEIGHT )にアクセスする.

x[2], x[[2]]

2 番目の列データにアクセスする.

x[3, 2], x[[3, 2]]

3 行 2 列目のデータにアクセスする.

x[[3, "列名"]], x[[3, "列名"]]

指定した列の 3 行目のデータにアクセスする.

x[c(1, 2)]

1 列目と 2 列目のデータにのみアクセスする.x[ , c(1, 2)] も同じ.

x[c(3, 4), ]

3 行目と 4 行目のデータにのみアクセスする.

x[c(1,3,5,2,4), ]

順序ベクトル c(1,3,5,2,4) の順に行を並べかえる.

x[ ,c(T,F,T)]

論理ベクトル c(T,F,T) が TRUE となっている列にのみアクセスする.

x[x$SEX=="F", ]

性別が F(女性)である行にのみアクセスする.

x[x$SEX=="F" & x$WEIGHT>50, ]

性別が F(女性)かつ体重が 50kg 以上である行にのみアクセスする.

以下にいくつかの例を示す.

データの変更や追加,消去方法はベクトルや行列とほぼ同じである.例えば x[[2]] や x[2] でデータフレームの 2 列目にアクセスすることが出来る.

 
 x[[2]]               # 第 2 列のデータを見る -> a[2] でもよい

[1] 158 162 177 173 166

 x[c(1,3,4),]         # 第 1, 3, 4 行を抜き出す

  SEX HEIGHT WEIGHT
1   F    158     51
3   M    177     72
4   M    173     57

データを消去する場合は,行や列に NULL を代入すればよい.

 
 x[[2]] <- NULL       # 第2列を消去:列の消去は NULL を代入する.x <- x[,-c(2)] でも同じ結果
 x

  SEX WEIGHT
1   F     51
2   F     55
3   M     72
4   M     57
5   M     64

データをセル形式で閲覧・編集

データをセル形式で見る場合は関数 edit(データフレーム名) を用いる.

 
 x <- edit(x)

データをクリックすることで値を編集することが出来,列名をクリックすれば数値型と文字型の選択,列名の変更などが行える.編集が終了したらウインドウを閉じることで,変更が反映される.

【Windows 版】

【Mac OS X 版】

以下に類似の関数を示す.例えば data.entry(x$ID, x$SEX) と,列の一部を編集したいときに使用する.

コマンド

機能

data.entry(..., Modes = NULL, Names = NULL)

Modes で変数に使用されるモード,

Names で変数に使用される名前を指定してセルで編集する.

dataentry(data, modes)

data で数値および文字ベクトルのリストを,modes で変数のモードを与えるデータの長さのリスト (list()でも可) を指定してセルで編集する.

de(..., Modes = list(), Names = NULL)

上の 2 つとほぼ同様.

他の型への変換

データフレームを行列などの他の型に変換する場合は,この頁 に紹介されている関数を用いればよい.例えば,データフレームを行列に変換する場合は関数 data.matrix() を用いる.

また,データフレームに関する詳細な情報を得る場合は関数 str() を,データフレームかどうかを検査する場合は関数 is.data.frame() を用いればよい.