列名・行名を変更する
データフレームの列を変更するには、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より大きいデータを抜き出したければ、x
でiris
を指定し、subset
をSepal.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のデータセットより、Species
がsetosa
のデータを除去する。
> 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