Rで解析:オブジェクトを次元データフレーム(dibble)に変換する「dibble」パッケージ

Rの解析に役に立つ記事
スポンサーリンク

オブジェクトを次元データフレーム(dibble)に変換するパッケージの紹介です。array classなどを変換することで計算処理が楽になると思います。

パッケージのバージョンは0.3.0。windows 11のR version 4.4.1で確認しています。

スポンサーリンク

パッケージのインストール

下記コマンドを実行してください。

# パッケージのインストール
install.packages("dibble")

実行コマンド

詳細はコメントやコマンドヘルプを確認してください。

# パッケージの読み込み
library("dibble")

### データ例の作成 #####
Array_01 <- array(1:6, c(3, 3),
                  list(軸_01 = letters[1:3],
                       Test_02 = letters[1:3]))
Array_02 <- array(1:3, 3,
                  list(軸_02 = letters[1:3]))
# classの確認
class(Array_01)
[1] "matrix" "array" # Array_02も同じ

# array classの計算はエラー
Array_01 * Array_02
# Array_01 * Array_02 でエラー: 適切な配列ではありません
########

# オブジェクトを次元データフレーム(dibble)に変換する:as_dibbleコマンド
dibble_01 <- as_dibble(Array_01)

# classの確認
class(dibble_01)
[1] "ddf_col"

# 構造の確認:次元付きのデータになっている
str(dibble_01)
'ddf_col' int [1:3, 1:3] 1 2 3 4 5 6 1 2 3
- attr(*, "dim_names")=List of 2
..$ 軸_01  : chr [1:3] "a" "b" "c"
..$ Test_02: chr [1:3] "a" "b" "c"

# コンソールに表示
Array_01
#      Test_02
# 軸_01 a b c
#     a 1 4 1
#     b 2 5 2
#     c 3 6 3

## 使用例 
dibble_02 <- as_dibble(Array_02)

# 乗算:新しい次元名を作成するとエラーが出るが内容に計算結果は正しい
dibble_01 * dibble_02

# A dibble:   27
# Dimensions: 軸_01 [3], Test_02 [3], 軸_02 [3]
#     軸_01 Test_02 軸_02     .
#     <chr> <chr>   <chr> <int>
#   1 a     a       a         1
#   2 a     a       b         2
#   3 a     a       c         3
#   4 a     b       a         4
#   5 a     b       b         8
#   6 a     b       c        12
#   7 a     c       a         1
#   8 a     c       b         2
#   9 a     c       c         3
#  10 b     a       a         2
# # ℹ 17 more rows
# # ℹ Use `print(n = ...)` to see more rows
# 警告メッセージ:
#   1: Broadcasting,
# New axes, dim_names = c("軸_01", "Test_02", "軸_02") 
# 2: Broadcasting,
# New axes, dim_names = c("軸_01", "Test_02", "軸_02") 


# 警告メッセージなしで計算する:broadcastコマンド
Broad_Result <- broadcast(dibble_01 * dibble_02,
                          dim_names = c("軸_01", "Test_02", "軸_02"))
# 確認
Broad_Result
# A dibble:   27
# Dimensions: 軸_01 [3], Test_02 [3], 軸_02 [3]
#    軸_01 Test_02 軸_02     .
#    <chr> <chr>   <chr> <int>
#   1 a     a       a         1
#   2 a     a       b         2
#   3 a     a       c         3
#   4 a     b       a         4
#   5 a     b       b         8
#   6 a     b       c        12
#   7 a     c       a         1
#   8 a     c       b         2
#   9 a     c       c         3
#  10 b     a       a         2
# ℹ 17 more rows
# ℹ Use `print(n = ...)` to see more rows

## "ddf_col"はデータフレームのように操作できる
# 「dibble」パッケージでサポートしているコマンド
Broad_Result %>%
  filter(軸_02 == "a") %>%
  rename(テスト_02 = 軸_02) %>%
  select(Test_02, テスト_02) # selectは列順を変える
# A dibble:   9
# Dimensions: Test_02 [3], テスト_02 [1], 軸_01 [3]
#   Test_02 テスト_02 軸_01     .
#   <chr>   <chr>     <chr> <int>
#   1 a       a         a         1
#  2 a       a         b         2
#  3 a       a         c         3
#  4 b       a         a         4
#  5 b       a         b         5
#  6 b       a         c         6
#  7 c       a         a         1
#  8 c       a         b         2
#  9 c       a         c         3

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました