本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

Rで解析:データの取り扱いに使用する基本コマンド

Rを使用するとエクセルでは分からなかったデータの事実が判明することがあります。Rはコマンドとして解析の手順が残るため、「どの範囲を選択したか」「どの計算式を使ったか」の記録が残るので、後から確認・再現できるのが大きな利点です。ぜひ、Rで充実した解析を楽しんでください。

データの取り扱いに使用する基本的なコマンドを「ベクトルの作成」「データの確認」「基本統計量」「行と列の計算」「欠損値の取り扱い」「並べ替えと集計」「数値の丸め」の順に紹介します。「からだにいいもの」では数多くのパッケージを紹介しています。ぜひご覧ください。

ベクトルの作成方法

Rでのデータ操作の基本はベクトルです。まずはベクトルの作成方法から紹介します。c()コマンドで任意の値を、seq()コマンドで等間隔の数列を、rep()コマンドで繰り返しの数列を作成できます。

Rで使用するコマンド

ベクトルの作成:c(…)

等間隔の数列:seq(from, to, by)

繰り返しの数列:rep(x, times)

# c()コマンドで任意の値を結合してベクトルを作成します。
x <- c(2, 4, 6, 8, 10)
x
[1]  2  4  6  8 10

# コロン(:)で連続した整数を作成します。
y <- 1:5
y
[1] 1 2 3 4 5

# seq()コマンドで0から100まで25刻みの数列を作成します。
z <- seq(0, 100, by = 25)
z
[1]   0  25  50  75 100

# rep()コマンドで1と2を3回繰り返した数列を作成します。
w <- rep(c(1, 2), times = 3)
w
[1] 1 2 1 2 1 2
スポンサーリンク

データの確認方法

解析を始める前にデータの中身を確認することは非常に重要です。エクセルでは目視での確認になりがちですが、Rではコマンドで要素数や構造、要約統計量を一度に確認できます。

Rで使用するコマンド

要素数:length(x)

先頭の表示:head(x, n = 6)

末尾の表示:tail(x, n = 6)

構造の確認:str(x)

要約統計量:summary(x)

# NAは欠損値を意味します。
x <- c(NA, 3, 4, 12, 100)
# 要素数を確認します。
length(x)
[1] 5

# nオプションで先頭から表示する要素数を指定します。
head(x, n = 3)
[1] NA  3  4

# nオプションで末尾から表示する要素数を指定します。
tail(x, n = 2)
[1]  12 100

# データの型と内容を確認します。numは数値型を示します。
str(x)
num [1:5] NA 3 4 12 100

# 最小値、四分位数、中央値、平均値、欠損値の数を一度に確認できます。
summary(x)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   3.00    3.75    8.00   29.75   34.00  100.00       1

最大値と最小値の求め方

最大値と最小値は非常に重要な指標になるかと思います。あわせて、最大値と最小値を同時に返すrange()コマンド、最大値・最小値の「位置」を返すwhich.max()、which.min()コマンドも紹介します。外れ値の確認に役立ちます。

Rで使用するコマンド

最大:max(x, na.rm = FALSE)

最小:min(x, na.rm = FALSE)

最小と最大:range(x, na.rm = FALSE)

最大値の位置:which.max(x)

最小値の位置:which.min(x)

# na.rmをTRUEとすることで欠損値が除外されます。
# 初期状態ではFALSEになっています。
x <- c(NA, 3, 4, 12, 100)
# na.rmがTRUE
max(x, na.rm = TRUE)
[1] 100
# na.rmがFALSE。欠損値が含まれるとNAが返ります。
max(x, na.rm = FALSE)
[1] NA

# na.rmがTRUE
min(x, na.rm = TRUE)
[1] 3
# na.rmがFALSE
min(x, na.rm = FALSE)
[1] NA

# 最小値と最大値を同時に返します。
range(x, na.rm = TRUE)
[1]   3 100

# 最大値が何番目の要素かを返します。欠損値は自動的に無視されます。
which.max(x)
[1] 5

# 最小値が何番目の要素かを返します。
which.min(x)
[1] 2

和・平均・中央値の求め方

データの代表値として平均値と中央値は使い分けが重要です。外れ値の影響を受けやすい平均値に対して、中央値は影響を受けにくい特徴があります。mean()コマンドのtrimオプションを使用すると、上下の極端な値を除いたトリム平均も算出できます。

Rで使用するコマンド

和:sum(x, na.rm = FALSE)

平均:mean(x, trim = 0, na.rm = FALSE)

中央値:median(x, na.rm = FALSE)

# na.rmをTRUEとすることで欠損値が除外されます。
x <- c(NA, 3, 4, 12, 100)
# 和を求めます。
sum(x, na.rm = TRUE)
[1] 119

# 平均を求めます。
mean(x, na.rm = TRUE)
[1] 29.75

# trimオプションで上下25%の値を除いたトリム平均を求めます。
mean(x, trim = 0.25, na.rm = TRUE)
[1] 8

# 中央値を求めます。100という外れ値の影響を受けていないことが分かります。
median(x, na.rm = TRUE)
[1] 8

分散・標準偏差・分位数の求め方

データのばらつきを確認する指標です。なお、var()コマンドとsd()コマンドは不偏分散(n-1で割る計算)に基づく値を返します。quantile()コマンドは初期設定で0%、25%、50%、75%、100%の分位数を返し、probsオプションで任意の分位点を指定できます。

Rで使用するコマンド

分散:var(x, na.rm = FALSE)

標準偏差:sd(x, na.rm = FALSE)

分位数:quantile(x, probs = seq(0, 1, 0.25), na.rm = FALSE)

# 欠損値を含まないデータで実行します。
y <- c(3, 4, 12, 100)
# 不偏分散を求めます。
var(y)
[1] 2209.583

# 標準偏差を求めます。
sd(y)
[1] 47.00621

# 初期設定では四分位数を返します。
quantile(y)
    0%    25%    50%    75%   100% 
  3.00   3.75   8.00  34.00 100.00 

# probsオプションで任意の分位点を指定します。例は90%点です。
quantile(y, probs = 0.9)
 90% 
73.6

行と列の和と平均

エクセルでも出せますが、範囲の指定など間違いの元となる作業があります。Rでは行列やデータフレーム全体に対して一つのコマンドで計算できるため、範囲指定のミスが起こりません。

Rで使用するコマンド

行の和:rowSums(x, na.rm = FALSE)

行の平均:rowMeans(x, na.rm = FALSE)

列の和:colSums(x, na.rm = FALSE)

列の平均:colMeans(x, na.rm = FALSE)

# na.rmをTRUEとすることで欠損値が除外されます。
# 初期状態ではFALSEになっています。
# 3*3の行列を作成。
x <- matrix(c(8, 5, 6, 3, 9, 3, 1, 2, 3), 3, 3)
x 
  [,1] [,2] [,3]
[1,]  8  3  1 
[2,]  5  9  2 
[3,]  6  3  3

#行の和
rowSums(x)
[1] 12 16 12

#行の平均
rowMeans(x)
[1] 4.000000 5.333333 4.000000

#列の和
colSums(x)
[1] 19 15 6

#列の平均
colMeans(x)
[1] 6.333333 5.000000 2.000000

和と平均以外の計算を行と列に適用したい場合はapply()コマンドを使用します。MARGINオプションに1を指定すると行方向、2を指定すると列方向に任意のコマンドを適用できます。

行・列への関数の適用:apply(X, MARGIN, FUN)

# MARGINオプションに1を指定して行ごとの最大値を求めます。
apply(x, 1, max)
[1] 8 9 6

# MARGINオプションに2を指定して列ごとの標準偏差を求めます。
apply(x, 2, sd)
[1] 1.527525 3.464102 1.000000

欠損値の取り扱い

実際のデータには欠損値(NA)が含まれることが多くあります。エクセルでは空白セルが自動的に無視されるため気づきにくいですが、Rでは欠損値を明示的に取り扱う必要があります。欠損値の位置と数を確認してから解析を進めることをおすすめします。

Rで使用するコマンド

欠損値の判定:is.na(x)

欠損値の除外:na.omit(x)

欠損のない行の判定:complete.cases(x)

x <- c(NA, 3, 4, 12, 100)
# 欠損値の位置をTRUE/FALSEで返します。
is.na(x)
[1]  TRUE FALSE FALSE FALSE FALSE

# TRUEは1として計算されるため、欠損値の数を求められます。
sum(is.na(x))
[1] 1

# 欠損値を除外したデータを返します。attr以下は除外した位置の情報です。
na.omit(x)
[1]   3   4  12 100
attr(,"na.action")
[1] 1
attr(,"class")
[1] "omit"

# データフレームで欠損のない行を抽出する例です。
Dat <- data.frame(A = c(1, NA, 3), B = c(4, 5, NA))
Dat
   A  B
1  1  4
2 NA  5
3  3 NA

# 欠損値を含まない行をTRUEで返します。
complete.cases(Dat)
[1]  TRUE FALSE FALSE
# 欠損値を含まない行のみを抽出します。
Dat[complete.cases(Dat), ]
  A B
1 1 4

データの並べ替え

sort()コマンドは値そのものを並べ替えて返し、order()コマンドは並べ替えた際の「元の位置」を返します。order()コマンドはデータフレームを特定の列で並べ替える際に活躍します。

Rで使用するコマンド

並べ替え:sort(x, decreasing = FALSE)

並べ替えの位置:order(x, decreasing = FALSE)

逆順:rev(x)

x <- c(5, 2, 8, 1, 9)
# 初期設定では昇順に並べ替えます。
sort(x)
[1] 1 2 5 8 9

# decreasingオプションをTRUEとすることで降順になります。
sort(x, decreasing = TRUE)
[1] 9 8 5 2 1

# 昇順に並べ替えた際の元の位置を返します。
order(x)
[1] 4 2 1 3 5

# 要素の順番を逆にします。
rev(x)
[1] 9 1 8 2 5

データの集計

カテゴリーデータの内容を確認する際に使用します。unique()コマンドで重複を除いた値の一覧を、table()コマンドで値ごとの出現回数を確認できます。エクセルのCOUNTIF関数やピボットテーブルに相当する作業が一つのコマンドで完了します。

Rで使用するコマンド

重複の除外:unique(x)

度数の集計:table(x)

x <- c("A", "B", "A", "C", "B", "A")
# 重複を除いた値の一覧を返します。
unique(x)
[1] "A" "B" "C"

# 値ごとの出現回数を集計します。
table(x)
x
A B C 
3 2 1

数値の丸め方

解析結果を報告する際には桁数の調整が必要になります。round()コマンドは小数点以下の桁数を、signif()コマンドは有効数字の桁数を指定します。

Rで使用するコマンド

四捨五入:round(x, digits = 0)

有効数字:signif(x, digits = 6)

切り捨て:floor(x)

切り上げ:ceiling(x)

x <- c(3.14159, 2.71828, 1.41421)

# digitsオプションで小数点以下の桁数を指定します。
round(x, digits = 2)
[1] 3.14 2.72 1.41

# digitsオプションで有効数字の桁数を指定します。
signif(x, digits = 3)
[1] 3.14 2.72 1.41

# 小数点以下を切り捨てます。
floor(x)
[1] 3 2 1

# 小数点以下を切り上げます。
ceiling(x)
[1] 4 3 2

本記事で紹介したコマンドはすべてRの標準機能であり、パッケージのインストールは不要です。基本コマンドを組み合わせるだけでも、エクセルよりも再現性の高い解析が実現できます。少しでも、あなたの解析が楽になりますように!!

スポンサーリンク
価格および配送状況は変更される場合があります。購入時は商品ページをご確認ください。
当サイトに表示されている商品情報はAmazonから提供されたものであり、更新または削除される場合があります。
karada-goodはAmazonアソシエイトとして、適格販売により収入を得ています。