如何在 R 中读取大型数据集 [重复]

Posted

技术标签:

【中文标题】如何在 R 中读取大型数据集 [重复]【英文标题】:How to read large dataset in R [duplicate] 【发布时间】:2011-04-27 10:53:00 【问题描述】:

可能重复:Quickly reading very large tables as dataframes in R

嗨,

尝试在 R 中读取大型数据集时,控制台显示以下错误:

data<-read.csv("UserDailyStats.csv", sep=",", header=T, na.strings="-", stringsAsFactors=FALSE)
> data = data[complete.cases(data),]
> dataset<-data.frame(user_id=as.character(data[,1]),event_date= as.character(data[,2]),day_of_week=as.factor(data[,3]),distinct_events_a_count=as.numeric(as.character(data[,4])),total_events_a_count=as.numeric(as.character(data[,5])),events_a_duration=as.numeric(as.character(data[,6])),distinct_events_b_count=as.numeric(as.character(data[,7])),total_events_b=as.numeric(as.character(data[,8])),events_b_duration= as.numeric(as.character(data[,9])))
Error: cannot allocate vector of size 94.3 Mb
In addition: Warning messages:
1: In data.frame(user_msisdn = as.character(data[, 1]), calls_date = as.character(data[,  :
  NAs introduced by coercion
2: In data.frame(user_msisdn = as.character(data[, 1]), calls_date = as.character(data[,  :
  NAs introduced by coercion
3: In class(value) <- "data.frame" :
  Reached total allocation of 3583Mb: see help(memory.size)
4: In class(value) <- "data.frame" :
  Reached total allocation of 3583Mb: see help(memory.size)

有人知道如何读取大型数据集吗? UserDailyStats.csv 的大小约为 2GB。

【问题讨论】:

相关:***.com/questions/1875795/… 和 ***.com/questions/3340568/… 另见:yusung.blogspot.com/2007/09/… 和 ff.r-forge.r-project.org/bit&ff2.1-2_WU_Vienna2010.pdf 【参考方案1】:

当然:

    买一台更大的电脑,尤其是更多的内存 运行 64 位操作系统,请参阅 1) 关于更多内存,现在您可以使用它了 只读您需要的列 读取更少的行 以二进制形式读取数据,而不是重新解析 2gb(效率极低)。

在R 网站上还有一个manual for this。

【讨论】:

【参考方案2】:

您可以尝试使用colClassesread.csv 调用中指定数据类型。

data<-read.csv("UserDailyStats.csv", sep=",", header=T, na.strings="-", stringsAsFactors=FALSE, colClasses=c("character","character","factor",rep("numeric",6)))

尽管使用这种大小的数据集,它可能仍然存在问题,并且没有大量内存可用于您可能想要进行的任何分析。添加 RAM 和使用 64 位计算将提供更大的灵活性。

【讨论】:

【参考方案3】:

如果这是从控制台输出,那么您读取数据,但转换存在问题。

如果您以交互方式工作,则在 read.csv 之后使用 save(data, file="data.RData") 保存数据,关闭 R,运行新实例,使用 load("data.RData") 加载数据,然后查看是否失败。

但是从这个错误消息中,我看到你有转换问题,所以你应该看看。

【讨论】:

以上是关于如何在 R 中读取大型数据集 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中处理大型数据集

将特定数量的行转换为 R 中的列,并对大型数据集重复该过程

在 R 中处理大型数据集

对于大型数据集,如何在 R 中使用先验算法?

我们如何将大型数据集从 Google BigQuery 导入 R?

如何在 R/Python 中迭代/循环一个大型(>2GB)JSON 数据集? [复制]