R入門
応用
最終更新:
r-intro
目次
リダイレクトを使う
dplyrパッケージを使う。
> head(as.double(ts(UKDriverDeaths)))
[1] 1687 1508 1507 1385 1632 1511
> as.double(ts(UKDriverDeaths)) %>% head()
as.double(ts(UKDriverDeaths)) %>% head() でエラー:
関数 "%>%" を見つけることができませんでした
> library(dplyr)
> as.double(ts(UKDriverDeaths)) %>% head()
[1] 1687 1508 1507 1385 1632 1511
> head() %<% as.double(ts(UKDriverDeaths))
head() %<% as.double(ts(UKDriverDeaths)) でエラー:
関数 "%<%" を見つけることができませんでした
エクセルのファイル(.xlsx)の中身を読み込む
openxlsxパッケージのread.xlsx関数を使う。以下は、以下のような値が入力されているdata.xlsxファイルをカレントフォルダーに置いた場合の動作例。

sheetオプションに読み込むシートの番号(連番)かシート名を指定する。デフォルトでは1行目をフィールド名として採用するため、不要な場合はcolNamesオプションをFALSEにする。デフォルトでは1行目から読み込むため、読み込みはじめの行を指定したい場合はstartRowオプションにその開始行を指定する。
読み込まれたものはデータフレームになる。
> library("openxlsx")
> read.xlsx("data.xlsx", sheet = 1)
No 名前 体重
1 10 ABC 50.00
2 20 あいう 60.10
3 30 亜井宇 70.12
> read.xlsx("data.xlsx", sheet = "Sheet1")
No 名前 体重
1 10 ABC 50.00
2 20 あいう 60.10
3 30 亜井宇 70.12
> read.xlsx("data.xlsx", sheet = "Sheet2")
read.xlsx.default("data.xlsx", sheet = "Sheet2") でエラー:
Cannot find sheet named "Sheet2"
> read.xlsx("data.xlsx", sheet = 1, colNames = FALSE)
X1 X2 X3
1 No 名前 体重
2 10 ABC 50
3 20 あいう 60.1
4 30 亜井宇 70.12
> read.xlsx("data.xlsx", sheet = 1, startRow = 2)
10 ABC 50
1 20 あいう 60.10
2 30 亜井宇 70.12
> dtf <- read.xlsx("data.xlsx", sheet = 1)
> dtf
No 名前 体重
1 10 ABC 50.00
2 20 あいう 60.10
3 30 亜井宇 70.12
> mean(dtf$体重)
[1] 60.07333
旧エクセルのファイル(.xls)を読み込む
readxlパッケージのread_xls関数を使う。readxlパッケージはその関数利用時にR以外のソフトウェアを必要としないため、パッケージをインストールすれば、そのまま使うことができる。よくネットで見かけるopenxlsxパッケージはxlsを扱うことはできない。
この関数の戻り値はtibble型。data.frame型とほぼ同じように扱うことができる。
以下のようなxlsファイルがあり、カレントディレクトリにsample.xlsというファイル名で保存した状態での動作例。オプションで特に指定をしなければ1行目をフィールド名として採用する。データが1行目から始まる場合はcol_namesオプションにFALSEを指定する。読み込ませる列(A~IV)を指定する場合はrangeにcell_colsを使用して指定する。各フィールドのデータ型は未指定では自動的にデータ型の類推(guess)がなされて決まるが、これを指定の型にしたい場合はcol_typesオプションに、ベクトルで順番に指定をする。

> library(readxl)
> tbl <- read_xls("sample.xls")
> tbl
# A tibble: 4 x 4
no name date age
<dbl> <chr> <dttm> <dbl>
1 1 A 2022-01-01 00:00:00 10
2 2 B 2022-02-02 00:00:00 20
3 3 C 2022-03-03 00:00:00 30
4 4 D 2022-05-05 00:00:00 40
> tbl <- read_xls("sample.xls", col_names = FALSE)
New names:
* `` -> `...1`
* `` -> `...2`
* `` -> `...3`
* `` -> `...4`
> tbl
# A tibble: 5 x 4
...1 ...2 ...3 ...4
<chr> <chr> <chr> <chr>
1 no name date age
2 1 A 44562 10
3 2 B 44594 20
4 3 C 44623 30
5 4 D 44686 40
> tbl <- read_xls("sample.xls", range = cell_cols("B:D"))
> tbl
# A tibble: 4 x 3
name date age
<chr> <dttm> <dbl>
1 A 2022-01-01 00:00:00 10
2 B 2022-02-02 00:00:00 20
3 C 2022-03-03 00:00:00 30
4 D 2022-05-05 00:00:00 40
> tbl <- read_xls("sample.xls", col_types = c("guess", "text", "text", "numeric"))
> tbl
# A tibble: 4 x 4
no name date age
<dbl> <chr> <chr> <dbl>
1 1 A 44562 10
2 2 B 44594 20
3 3 C 44623 30
4 4 D 44686 40
> tbl <- read_xls("sample.xls", col_types = c("guess", "text", "date", "numeric"))
> tbl
# A tibble: 4 x 4
no name date age
<dbl> <chr> <dttm> <dbl>
1 1 A 2022-01-01 00:00:00 10
2 2 B 2022-02-02 00:00:00 20
3 3 C 2022-03-03 00:00:00 30
4 4 D 2022-05-05 00:00:00 40
Excelの日付データをRの日付データに変換する
openxlsxパッケージなどを使ってExcelのファイルの日付データを読み込んだとき、日付データではなく数値データで読み込まれるときがある。これを読み込み元の日付相当の日付データに戻す場合は、as.Date関数にoriginオプションを付けて変換する。
Sheet1に以下のように入力したエクセルのファイルdata.xlsxを用意して試してみる。

> library(openxlsx)
> dtf <- read.xlsx("data.xlsx", colName = FALSE)
> dtf
X1 X2
1 44562 ← 書式を「日付」
2 44562 ← 書式を「標準」
> mode(dtf$X1)
[1] "numeric"
> class(dtf$X1)
[1] "numeric"
> as.Date(dtf$X1, origin = "1899-12-30")
[1] "2022-01-01" "2022-01-01"
Excelの日付データは、内部では一連の連番で保存しており、Windows版は1900年1月1日を1とした連番で管理している。1900年1月2日は翌日のため2となり、1901年1月1日は366日後に当たるため367となる(1900年は閏年)。つまり、値として基準になる日は1899年12月31日である。一方、as.Date関数では以下のとおりにoriginオプションに指定した日を基準としている。
> as.Date(0, origin = "1900-01-01")
[1] "1900-01-01"
そのため、読み取った値をas.Date関数で変換するときは、originオプションに1899年12月30日を指定すること。
最新版のパッケージがあるか否かを確認する
old.packages関数を使う。アップデートできるパッケージがある場合は、それらが表示される。
> old.packages()
ここではバージョン番号を比較して表示しているだけであり、パッケージや環境によっては、あえてアップデートされない場合があるので注意。
あくまで表示されるだけで、実際にアップデートをする場合はupdate.packages関数を使う。
インストールしているパッケージを一括でアップデートする。
update.packages関数を使う。アップデートできるパッケージがある場合は、パッケージ1つごとに、アップデートするか否かの確認のダイアログが表示される。
> update.packages()
その環境で使用中(library関数で使用を宣言しているパッケージ)のパッケージはアップデートされないので注意。
tibbleを使う
tidyverseパッケージに含まれているため、このパッケージの使用を宣言すればよい。tibbleとはデータフレームを使いやすくしたようなもので、データフレームとほぼ同じように扱うことができる。
> library(tidyverse)
> n <- 1:3
> s <- c("A", "B", "C")
> d <- c(1.5, 2.5, 3.6)
> tbl <- tibble(n, s, d)
> tbl
# A tibble: 3 x 3
n s d
<int> <chr> <dbl>
1 1 A 1.5
2 2 B 2.5
3 3 C 3.6
> tbl <- as_tibble(data.frame(n, s, d))
> tbl
# A tibble: 3 x 3
n s d
<int> <chr> <dbl>
1 1 A 1.5
2 2 B 2.5
3 3 C 3.6
> tbl[2, 3]
# A tibble: 1 x 1
d
<dbl>
1 2.5
> tbl[1, ]
# A tibble: 1 x 3
n s d
<int> <chr> <dbl>
1 1 A 1.5
> tbl[, 2]
# A tibble: 3 x 1
s
<chr>
1 A
2 B
3 C