29

私は、2つの大きな(サイズ>100万/300 KB RDataファイル)データフレームをマージするための効率的な(コンピューターリソースと学習/実装の両方の)方法を探しています。

ベースRの「マージ」とプライアの「結合」は、すべてのメモリを使い果たして、システムを効果的にクラッシュさせているように見えます。


負荷テストデータフレームの

試してみてください

test.merged<-merge(test, test)

また

test.merged<-join(test, test, type="all")  
    -

次の投稿は、マージと代替案のリストを提供します。
データフレーム(内側、外側、左、右)を結合(マージ)する方法は?

以下により、オブジェクトサイズの検査が可能になります:
https ://heuristically.wordpress.com/2010/01/04/r-memory-usage-statistics-variable/

匿名によって生成されたデータ

4

3 に答える 3

27

data.tableメソッドとdata.frameメソッドのタイミングを次に示します。
data.tableの使用は非常に高速です。メモリに関しては、RAMの使用において2つの方法が非常に似ている(20%以内)ことを非公式に報告できます。

library(data.table)

set.seed(1234)
n = 1e6

data_frame_1 = data.frame(id=paste("id_", 1:n, sep=""),
                          factor1=sample(c("A", "B", "C"), n, replace=TRUE))
data_frame_2 = data.frame(id=sample(data_frame_1$id),
                          value1=rnorm(n))

data_table_1 = data.table(data_frame_1, key="id")
data_table_2 = data.table(data_frame_2, key="id")

system.time(df.merged <- merge(data_frame_1, data_frame_2))
#   user  system elapsed 
# 17.983   0.189  18.063 


system.time(dt.merged <- merge(data_table_1, data_table_2))
#   user  system elapsed 
#  0.729   0.099   0.821 
于 2012-06-21T23:40:32.663 に答える
21

必須のdata.table例は次のとおりです。

library(data.table)

## Fix up your example data.frame so that the columns aren't all factors
## (not necessary, but shows that data.table can now use numeric columns as keys)
cols <- c(1:5, 7:10)
test[cols] <- lapply(cols, FUN=function(X) as.numeric(as.character(test[[X]])))
test[11] <- as.logical(test[[11]])

## Create two data.tables with which to demonstrate a data.table merge
dt <- data.table(test, key=names(test))
dt2 <- copy(dt)
## Add to each one a unique non-keyed column
dt$X <- seq_len(nrow(dt))
dt2$Y <- rev(seq_len(nrow(dt)))

## Merge them based on the keyed columns (in both cases, all but the last) to ...
## (1) create a new data.table
dt3 <- dt[dt2]
## (2) or (poss. minimizing memory usage), just add column Y from dt2 to dt
dt[dt2,Y:=Y]
于 2012-06-21T22:23:58.520 に答える
0

Rでマージする必要がありますか?そうでない場合は、単純なファイル連結を使用して基になるデータファイルをマージし、それらをRにロードします(これは状況に当てはまらない可能性がありますが、当てはまる場合は、頭痛の種を大幅に減らすことができます)。

于 2012-06-21T21:29:24.553 に答える