如何在R中读取大型数据集

4

可能重复:
如何在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。


1
请参考以下资料:https://dev59.com/8XI-5IYBdhLWcg3wZ3YR 和 https://dev59.com/f3A75IYBdhLWcg3wW3oZ - Joris Meys
参见:http://yusung.blogspot.com/2007/09/dealing-with-large-data-set-in-r.html 和 http://ff.r-forge.r-project.org/bit&ff2.1-2_WU_Vienna2010.pdf - Joris Meys
3个回答

13

当涉及到IT技术时,以下是一些可行的方法:

  1. 升级电脑配置,特别是更多的内存。
  2. 运行64位操作系统,如1)中提到的,现在你可以使用更多内存。
  3. 仅读取所需列。
  4. 减少读取的行数。
  5. 以二进制形式读取数据,而不是重新解析2gb的数据(这样非常低效)。

此外,还有一个手册可以在R网站上查看:点击这里查看


1
你可以尝试在 read.csv 调用中使用 colClasses 指定数据类型。
data<-read.csv("UserDailyStats.csv", sep=",", header=T, na.strings="-", stringsAsFactors=FALSE, colClasses=c("character","character","factor",rep("numeric",6)))

尽管使用这么大的数据集可能仍然会有问题,而且留给你想要进行的任何分析的内存不多。增加RAM并使用64位计算将提供更多的灵活性。

1
如果这是控制台输出的内容,那么您已经读取了数据,但转换存在问题。
如果您正在交互式地工作,则在使用read.csv之后,使用save(data,file="data.RData")保存您的数据,关闭R,运行新实例,使用load("data.RData")加载数据,并查看它是否失败。
但从这个错误消息中,我可以看到您有转换问题,所以您应该检查一下。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接