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


投稿日: Rの解析に役に立つ記事

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

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


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

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

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

実行コマンド

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

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

###データ例の作成#####
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)) ######## #データ内容の確認 TestData   Group Data1 Data2 1 Group2 3 11 2 Group1 4 12 3 Group1 2 14 4 Group2 4 13 5 Group1 2 11 6 Group3 3 13 7 Group1 4 13 8 Group1 3 14 9 Group3 2 11 10 Group3 4 15 ######## #データからテーブルを作成:bigtable #対象データ列と区分データ列の指定:ccolsオプション #ccol = (対象データ列, 区分データ列) BTData <- bigtable(TestData, ccols = c(2, 1)) #classの確認 class(BTData) [1] "matrix" #内容の確認 BTData  1 2 3 2 2 0 1 3 1 1 1 4 2 1 1 #基本コマンドで再現:tableコマンド TData <- table(TestData[, 2], TestData[, 1]) #classの確認 class(TData) [1] "table" #内容の確認 TData  Group1 Group2 Group3 2 2 0 1 3 1 1 1 4 2 1 1 #データの組み合わせの位置を検出:bigsplitコマンド BSData <- bigsplit(TestData, ccols = c(2, 1)) #該当する結果がなければnumeric(0)が返される BSData $`2:1` [1] 3 5 $`3:1` [1] 8 $`4:1` [1] 2 7 $`2:2` numeric(0) #以下省略 #基本コマンドで再現:splitコマンド split(TestData[,1], list(Data1 = factor(TestData[,2]), Data2 = TestData[,1])) $`2.Group1` [1] Group1 Group1 Levels: Group1 Group2 Group3 $`3.Group1` [1] Group1 Levels: Group1 Group2 Group3 $`4.Group1` [1] Group1 Group1 Levels: Group1 Group2 Group3 $`2.Group2` factor(0) Levels: Group1 Group2 Group3 #以下省略 ###参考,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 [/code]


少しでも、あなたのウェブや実験の解析が楽になりますように!!

スポンサードリンク

スポンサードリンク