オブジェクトを次元データフレーム(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
少しでも、あなたの解析が楽になりますように!!