データフレーム

Rで最もよく使われるデータの格納の仕方

列名・行名を変更する

データフレームの列を変更するには、colnames()関数を使い、ベクトルで指定する。

colnames(x) <- value
引数 説明
x データフレーム
> df <- data.frame(seq(1,5),c(24,28,29,22,30))
> df
  seq.1..5. c.24..28..29..22..30.
1         1                    24
2         2                    28
3         3                    29
4         4                    22
5         5                    30
> colnames(df) <- c("ID", "Age")
> df
  ID Age
1  1  24
2  2  28
3  3  29
4  4  22
5  5  30

データフレームのデータを抽出する

先頭のデータを抽出する

> head(restData, n=3)

末尾のデータを抽出する

> tail(restData, n=3)

特定の値を持つデータを抽出する

subset関数を使って抽出する

データの値によって選択するにはsubset()関数を使用する。

subset(x, subset, select)
引数 説明
x 抽出元のデータフレーム
subset データフレームから選択する条件
select 抽出する列名

irisのデータセットを使用して説明する。

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

このうちSepal.Lengthが5.0より大きいデータを抜き出したければ、xirisを指定し、subsetSepal.Length>5.0とすればよい。

> head(subset(iris, Sepal.Length>5.0))
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
6           5.4         3.9          1.7         0.4  setosa
11          5.4         3.7          1.5         0.2  setosa
15          5.8         4.0          1.2         0.2  setosa
16          5.7         4.4          1.5         0.4  setosa
17          5.4         3.9          1.3         0.4  setosa

%in%演算子を使って抽出する

> iris[iris$Species %in% c("setosa"),] %>% head
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa

特定の値を持つデータを除外する

irisのデータセットより、Speciessetosaのデータを除去する。

> head(subset(iris, Species!="setosa"))
   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
51          7.0         3.2          4.7         1.4 versicolor
52          6.4         3.2          4.5         1.5 versicolor
53          6.9         3.1          4.9         1.5 versicolor
54          5.5         2.3          4.0         1.3 versicolor
55          6.5         2.8          4.6         1.5 versicolor
56          5.7         2.8          4.5         1.3 versicolor

データフレームの数を数える

データフレームの列数を数える

列数(横)を数えるにはncol()関数を使用する。

ncol(x)
> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
> ncol(iris)
[1] 5

データフレームの行数を数える

nrow(x)
> tail(iris)
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
145          6.7         3.3          5.7         2.5 virginica
146          6.7         3.0          5.2         2.3 virginica
147          6.3         2.5          5.0         1.9 virginica
148          6.5         3.0          5.2         2.0 virginica
149          6.2         3.4          5.4         2.3 virginica
150          5.9         3.0          5.1         1.8 virginica
> nrow(iris)
[1] 150

指定した行にアクセスする

N行目にアクセスする

> X[c(1,3),]

指定した条件の行にアクセスする

> X[(X$var1 <= 3 & X$var3 > 11),]
> X[(X$var1 <= 3 | X$var3 > 15),]
> X[which(X$var2>8),]

指定した列にアクセスする

N列目にアクセスする

> X[,c(2,3)]

列名で指定してアクセスする

> X$var2
> X[,"var2"]

指定した列名のN番目の要素にアクセスする

> X$var2[c(1,3)]

指定した行と列にアクセスする

> X[1:2, "var2"]

データフレームを並び替える

> X[order(X$var1),]

複数の変数の順序で並び替える

並び替える順序でorder()関数の引数に指定する。

> X[order(X$var1, X$var3),]

plyrパッケージを使用して並び替える

plyrパッケージのarrange()関数を使用して、データフレームを並び替える。

> library(plyr)
> arrange(X, var1)

降順にする時は、desc関数で指定する。

> arrange(X, desc(var1))

データを要約する

データフレームの基本統計量を調べる

> summary(iris)

データフレームの基本統計量を得たいなら、str()関数も使用できる。

> str(iris)
'data.frame':	150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

分位数を調べる

> quantile(restData$councilDistrict, na.rm=TRUE)
> quantile(iris$Sepal.Length, probs=c(0,0.25,0.5,0.75,1))
0% 25% 50% 75% 100% 
4.3 5.1 5.8 6.4 7.9 

テーブルを作る

データを集計するテーブルを作成する。

引数  説明 
因子型とみなせるデータ 
useNA 欠損値(NA)の処理を指定するベクトル。"no"は欠損値が存在してもテーブルに表示されず、"ifany"だと欠損値が存在する場合、表示される。"always"だと、欠損値の有無に関わらず、表示される。
> table(iris$Species, useNA="ifany")

setosa versicolor virginica 
50 50 50 

二次元のテーブルを作る

> table(restData$councilDistrict, restData$zipCode)

クロス集計して分割表を作る

> as.data.frame(UCBAdmissions) %$% xtabs(Freq~Gender+Admit)
Admit
Gender Admitted Rejected
Male 1198 1493
Female 557 1278

多元分割表からフラット分割表を作る

> UCBAdmissions %>% ftable
Dept A B C D E F
Admit Gender 
Admitted Male 512 353 120 138 53 22
Female 89 17 202 131 94 24
Rejected Male 313 207 205 279 138 351
Female 19 8 391 244 299 317

欠損値を確認する

欠損値があるか調べる

欠損値を調べるis.na()関数にTRUEが一つでも含まれると、any()関数はTRUEを返す。欠損値がなければ、FALSEとなる。

> any(is.na(presidents))
[1] TRUE

欠損値を数える

> sum(is.na(presidents))
[1] 6

データフレームの列ごとに欠損値を調べる

> colSums(is.na(trees))
Girth Height Volume 
0 0 0 

特定の値を持つデータを調べる

> table(iris$Species %in% c("setosa"))

FALSE TRUE 
100 50 

データフレームに変換する

> as.data.frame(UCBAdmissions) %>% summary
Admit Gender Dept Freq 
Admitted:12 Male :12 A:4 Min. : 8.0 
Rejected:12 Female:12 B:4 1st Qu.: 80.0 
C:4 Median :170.0 
D:4 Mean :188.6 
E:4 3rd Qu.:302.5 
F:4 Max. :512.0 

See Also

データフレームの結合

データフレームにデータを追加する

tidyr

データをtidyに整形する

dplyr

データフレームを操作するためのパッケージ

データの書き出し

ファイルにデータを書き出す

tibble

データフレームの拡張版。

リスト

異種データの集まり