R 言語の主要データ構造と操作手法

データの基礎形態:ベクトル

ベクトルは、数値・文字列・論理値などの一次元配列を管理する基本的なオブジェクトです。重要なのは、同一ベクトル内ではすべての要素が同じデータタイプである必要がある点です。

# 数値、文字、論理値の作成
num_vec <- c(10, 20, 30)
chr_vec <- c("apple", "orange")
log_vec <- c(TRUE, FALSE, TRUE)

# タイプ確認
class(num_vec) 
# [1] "numeric"

連続する整数を作成するにはセコイ演算子(:)を使用できます。

range_vec <- 5:10
print(range_vec)

複数のベクトルを結合して新しいベクトルにするには c() 関数が用いられます。さらに、一定間隔でデータを生成する場合は seq()、要素を繰り返し配置する場合は rep() を利用します。

# 1 から 10 まで、ステップ幅 0.5 で生成
steps <- seq(from = 1, to = 10, by = 0.5)

# ベクトル「A」「B」をそれぞれ 2 回ずつ繰り返す
pattern <- rep(c("A", "B"), each = 2, times = 2)

特定の位置にある要素を取得するには中括弧 [] でインデックスを指定します。インデックスの順序を変えると返される結果の順序も変化することに注意してください。

二次元配列:マトリクス

マトリクスは行と列を持つ二次元データ構造であり、内部データはすべて同じ型であることが求められます。デフォルトでは列優先(column-major)でデータが埋め込まれます。

# 3 行 3 列のマトリクス作成
mat_example <- matrix(data = 1:9, nrow = 3, byrow = TRUE)
rownames(mat_example) <- c("Row_1", "Row_2", "Row_3")
colnames(mat_example) <- c("Col_A", "Col_B", "Col_C")

要素へのアクセスは行列形式の添え字で行えます。また、名前が付与されている場合は名前で参照することも可能です。

多次元配列:アレイ

マトリクスをさらに拡張し、3 つ以上の次元を持つのがアレイです。各次元のサイズはベクトルで指定します。

# 2 x 3 x 2 のアレイ作成
dims <- c(2, 3, 2)
arr_data <- array(data = 1:12, dim = dims)

異種混在データ:データフレーム

データフレームは、異なるデータ型(数値、文字、論理値など)を列ごとに持つ表形式のオブジェクトです。統計解析において最も頻繁に使用されます。

# サンプルデータの作成
df_samples <- data.frame(
  id = 1:5,
  name = c("Alice", "Bob", "Charlie", "Dave", "Eve"),
  score = c(88.5, 92.0, 75.5, 80.0, 95.5)
)

# 変数名の変更
names(df_samples)[3] <- "final_grade"

特定の列へアクセスする方法はいくつかあります。列名を使った直接参照や、ドル記号 $ を使用した参照が可能です。

# ドル記号による列取得
df_samples$name

# 特定の変数を用いた集計処理の簡略化
with(df_samples, {
  summary(final_grade)
})

with() 関数内の代入は局所的に行われるため、外部環境での参照には適用されません。これを回避するには二重矢印 <<- を使用してグローバル環境への保存を行います。

カテゴリカルデータ:因子(ファクター)

因子は分類データを効率的に扱うための特殊なデータ型です。統計モデルにおいて特に重要です。

  • 名义尺度: 順序のない分類データ。
  • 順序尺度: 大小関係はあるが間隔が決まっていない分類データ。

文字列ベクトルを因子に変換するには factor() を使用します。この際、レベル(カテゴリ)の順序は通常アルファベット順になりますが、明示的に指定することも可能です。

status_raw <- c("Good", "Bad", "Good", "Excellent")
# 順序ありファクターの作成
status_factor <- factor(status_raw, 
                        levels = c("Bad", "Good", "Excellent"), 
                        ordered = TRUE)

str()summary() 関数は対象とするデータ型に合わせて出力フォーマットを自動的に変更します。因子の場合は各カテゴリーの出現頻度を表示します。

柔軟な集合体:リスト

リストは、異なる種類のオブジェクト(ベクトル、マトリクス、他のリストなど)を組み合わせて一つの要素として保持できる構造です。

my_list <- list(
  config_name = "Project_A",
  count_data = c(10, 20, 30),
  result_matrix = matrix(1:4, 2, 2)
)

リスト内の要素には、二重角括弧 [[ ]] またはドル記号 $ でアクセスします。

現代表形式:tibble

tibble はデータフレームの改良版であり、tidyverse パッケージ群で使用されます。大規模なデータを扱う際にパフォーマンスや可読性が向上します。

tibble の特徴:

  • 大きなデータセットでも最初の数行のみ表示される。
  • データ型が常に列ヘッダー下に表示される。
  • 存在しない列へのアクセス時にエラーではなく警告を出す。

利用するには事前にパッケージをロードする必要があります。

library(tibble)

# tibbel の作成
df_tibble <- tibble(
  x = 1:3,
  y = c("foo", "bar", "baz")
)

データフレームとの相互変換は as.data.frame()as_tibble() を用いて行います。

# データフレーム化
standard_df <- as.data.frame(df_tibble)

# tibble 化
modern_tb <- as_tibble(standard_df)

tibble は反則的な列名(数字始まりなど)を受け入れることも可能ですが、アクセス時はバッククォートで囲む必要があります。

タグ: r-language data-structures tidyverse statistical-computing factors

7月2日 19:38 投稿