本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

Rで解析:データ要約の処理時間が速い!「bigtabulate」パッケージ

data.frameやmatrixの要約はtableやsplit,listコマンドを組み合わせることで可能ですが、本パッケージは処理の高速化とメモリ利用の効率化が考えられています。
10,000,000 * 3のデータの処理時間をtableコマンドと比較すると約2.8倍速いです。

パッケージバージョンは1.1.9。実行コマンドはR version 4.2.2で確認しています。

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

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

#パッケージのインストール
install.packages("bigtabulate")
スポンサーリンク

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

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

###データ例の作成#####
set.seed(1234)
n <- 10
TestData <- data.frame(Group = sample(paste0("Group", 1:3), n, replace = TRUE),
                       Data1 = sample(1:5, n, replace = TRUE),
                       Data2 = sample(11:15, n, replace = TRUE))
########

#データからテーブルを作成:bigtableコマンド
#対象データ列と区分データ列の指定:ccolsオプション
#ccol = (対象データ列, 区分データ列)
BTData <- bigtable(TestData, ccols = c(2, 1))
#classの確認
class(BTData)
[1] "matrix"
#内容の確認
BTData

#基本コマンドで再現:tableコマンド
TData <- table(TestData[, 2], TestData[, 1])
#classの確認
class(TData)
[1] "table"
#内容の確認
TData

#データの組み合わせの位置を検出:bigsplitコマンド
BSData <- bigsplit(TestData, ccols = c(2, 1), splitcol = 1)
#該当する結果がなければnumeric(0)が返される
#確認
BSData

#基本コマンドで再現:splitコマンド
split(TestData[,1], list(Data1 = factor(TestData[,2]), Data2 = TestData[,1]))

###参考,n = 10,000,000のデータ処理時間
n <- 10000000
BigData <- data.frame(Group = sample(paste0("Group", 1:3), n, replace = TRUE),
                      Data1 = sample(1:5, n, replace = TRUE),
                      Data2 = sample(11:15, n, replace = TRUE))

#bigtableコマンド
system.time(BTData <- bigtable(BigData, ccols = c(2, 1)))
ユーザ   システム       経過  
1.101      0.039      1.144

#tableコマンド
system.time(TData <- table(BigData[, 2], BigData[, 1]))
ユーザ   システム       経過  
2.808      0.164      2.978 

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

このコードの続きをAIに聞く

スポンサーリンク
Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.