r - 如何在 R 中使用 ff 包合并两个大型 data.frames?

标签 r join large-data

我有两个非常大的 .csv 文件,我们将它们称为 CSV.1 和 CSV.2(CSV.1 约为 1.4 GB,CSV.2 约为 790 MB),我想使用以下方式加入它们公共(public)字段“Id”上的 FULL OUTER JOIN。 CSV 文件的字段有多种类型,有些是完全数字的,有些是字符串。此外,CSV.1 约有 190 列和 160 万条记录,CSV.2 约有 40 列和 57 万条记录。

最初,我编写并执行了以下代码:

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

但是,这返回了典型的“您的 RAM 已完全征税”错误。所以我尝试了以下方法:

# 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() ”,但也没有什么乐趣。

提前非常感谢您的帮助!

最佳答案

您可以使用ff包的merge,仅供引用:

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

根据您的数据,这应该有效:

merge(first_csv_ff, second_csv_ff, by="Id", all=TRUE)

关于r - 如何在 R 中使用 ff 包合并两个大型 data.frames?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17577534/

相关文章:

php - 从 "users"表获取有关我的好友的用户的信息。关系/连接 SQL 表?

mysql - 需要使用左连接的 MySQL 查询,左连接显示左侧重复数据为空

mysql - 使用联接时如何返回不同的行?

lossless-compression - 超大数据无损压缩——行星人工智能

r - 使用 R 将数据点拟合到中心在原点的椭圆

r - 将 data.table 的行转换为向量

c++ - 检查conhost打印需要多长时间

mysql - 在mysql中插入大量数据

r - 在 R 中数据框的每一列之间插入一个空列

r - 最大似然估计