ご挨拶
こんにちは。
私は人流ビッグデータや地理情報を用いて研究をしている学部生です___φ(。_。*)
大規模なデータをRで処理するに当たって勉強したことや身を以って学んだことをまとめています。
※独学の部分も多いので、修正点等あればお気軽にコメントでのご指摘をお願いします……。
データ型とは
プログラミング言語の世界では、データの性質は型で表されており、同じ「2」でも整数型2L、数値型2.0、文字列型"2"のように型が違えば計算結果や処理方法も変わってくる。そのため、データセットを作成するときはそれぞれのデータの型を確認・統一することで予期せぬ結果の回避に繋がる。
統計関係でよく使うのはこの辺り
・ 数値型(numeric)
実数を扱っており、数値計算を行うときに最もオーソドックスな型。
x <- 1.002
# xのデータ型を確認
class(x)
# [1] "numeric"
補足
倍精度浮動小数点数で表され、1要素あたり8バイトで保存される。
・ 整数型(integer)
整数を扱っており、明示的に整数型として代入する場合はLを付ける。
x <- 12L
# xのデータ型を確認
class(x)
# [1] "integer"
補足
1要素当たり4バイトで保存されるため、大規模な整数データを扱う際はnumeric型よりもinteger型の方が省メモリになる。計算速度は両者とも大差ない。
・ 論理型(logical)
真偽値(TRUE/FALSE)を扱う。
x <- TRUE
# xのデータ型を確認
class(x)
# [1] "logical"
・ 文字列型(character)
文字列を扱う。明示的に文字列として代入するときは""を付ける。
また、計算ができないので、数字が文字列型として保存されているとき注意が必要。
x <- "3"
# xのデータ型を確認
class(x)
# [1] "character"
# character型は計算ができないことの確認
x + 2
# x + 2 でエラー: 二項演算子の引数が数値ではありません
補足
最低8バイト消費し、文字列の長さの分だけサイズが大きくなる。
・ Date型
「日付のみ」を表す型。
引き算により日数差を計算することもでき、結果はdifftime型となる。
date <- as.Date("2025-09-07")
# dateのデータ型を確認
class(date)
# [1] "Date"
date2 <- as.Date("2026-06-15")
# 2026-06-15と2025-09-07の日数差を計算
diff <- date2 - date
diff
# Time difference of 281 days
# 計算結果のデータ型を確認
class(diff)
# [1] "difftime"
# numeric型に変換すると日数になることの確認
as.numeric(date)
# [1] 20338
補足
内部的には1970-01-01からの日数がdouble型として保持されている。
・ POSIXct型
「日付+時間」を表す型。
引き算により経過時間を計算することもでき、結果はdifftime型となる。
#タイムゾーンをAsia/Tokyoに指定する場合(デフォルトではtz = "UTC")
t <- as.POSIXct("2025-09-07 16:20:00", tz = "Asia/Tokyo")
t
# [1] "2025-09-07 16:20:00 JST"
# tのデータ型を確認
class(t)
# [1] "POSIXct" "POSIXt"
# numeric型に変換するとUTCエポックからの経過秒数になることの確認
as.numeric(t)
# [1] 1757229600
補足
内部的にはUTCエポック(1970-01-01 00:00:00 UTC)からの経過秒数がdouble型として保持されている。
1 - (1) まとめ
- Rでは値の見た目は同じでも型が違うことがあり、その違いによって計算結果や処理方法が変わる。
- データのインポート/エクスポートの際にデータ型が変わってしまうことがあり、予期せぬ計算結果の原因となるのでclass()などで確認する癖をつけるのが大事。
- 大規模データを扱う際は特に、character型をnumeric型やinteger型に変換しておくと省メモリになるのでおすすめ。
登場した関数
・ データ型を確認する関数
class(x)
| 引数 | 説明 |
|---|---|
| x | データ型を確認したい変数(ベクトルやdata.tableでも可) |
・ numeric型に変換する関数
as.numeric(x)
| 引数 | 説明 |
|---|---|
| x | numeric型に変換したいオブジェクト(文字列、日付型など) |
・ Date型に変換する関数
as.Date(x)
| 引数 | 説明 |
|---|---|
| x | Data型に変換したい文字列(“yyyy-mm-dd”) |
・ POSIXct型に変換する関数
as.POSIXct(x)
| 引数 | 説明 |
|---|---|
| x | POSIXct型に変換したい文字列(“yyyy-mm-dd hh$:$mm:ss”) |
| tz | タイムゾーンの指定, 省略した場合UTCに設定 |
次の投稿
次の投稿は、データ構造についてです。
【都市・観光情報学でのRマニュアル】2 データ構造