2

2 つの非常に大きな .csv ファイルがあり、それらを CSV.1 と CSV.2 と呼びましょう (CSV.1 は約 1.4 GB、CSV.2 は約 790 MB)、FULL OUTER を使用してそれらを結合したいと考えています。共通フィールド「Id」で結合します。CSV ファイルのフィールドには複数のタイプがあり、完全に数値のフィールドもあれば、文字列のフィールドもあります。また、CSV.1 には約 190 列と 160 万レコードがあり、CSV.2 には約 40 列と 570k レコードがあります。

最初に、次のコードを作成して実行しました。

first_csv <- read.csv("CSV.1")
second_csv <- read.csv("CSV.2")
joined_csv <- join(CSV.1, CSV.2, by="Id", type="full")

ただし、これは典型的な「Your RAM is fully taxed」というエラーを返しました。だから私は次のことを試しました:

# Install and invoke the ff package
install.packages("ff")
library(ff)
library(plyr)

# Read in the data
first_csv <- read.csv("CSV.1")
second_csv <- read.csv("CSV.2")

# Convert dataframes to ffdf's, while freeing up memory
first_csv_ff <- as.ffdf(first_csv)
rm(first_csv)
gc()
second_csv_ff <- as.ffdf(second_csv)
rm(second_csv)
gc()

# Attempt to join the two ffdf's by "Id"
joined_csv <- join(first_csv_ff, second_csv_ff, by="Id", type="full")

R は次のエラーを出します。

Error in as.hi.integer(x, maxindex = maxindex, dim = dim, vw = vw, pack = pack) : 
NAs in as.hi.integer

as.ffdf なしで " <- ffdf() " も試しましたが、そこにも喜びはありませんでした。

よろしくお願いします。

4

2 に答える 2

1

merge参考までに、ffパッケージを使用できます。

FULL Outer join ~ merge(x = df1, y = df2, ...., all = TRUE)

あなたのデータで、これはうまくいくはずです:

merge(first_csv_ff, second_csv_ff, by="Id", all=TRUE)
于 2013-07-10T18:06:41.037 に答える