代码之家  ›  专栏  ›  技术社区  ›  Niko Gamulin

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

  •  4
  • Niko Gamulin  · 技术社区  · 14 年前

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

    3 回复  |  直到 7 年前
        1
  •  13
  •   Dirk is no longer here    14 年前

    当然:

    1. 买一台更大的电脑,尤其是内存
    2. 运行64位操作系统,请参阅1)关于更多RAM的信息,现在您可以使用它了。
    3. 只读取所需的列
    4. 读取更少行
    5. 以二进制形式读取数据,而不是重新解析2GB(这非常低效)。

    还有一个 manual for this R 站点。

        2
  •  1
  •   James    14 年前

    您可以尝试在 read.csv 调用使用 colClasses .

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

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

        3
  •  1
  •   Marek    14 年前

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

    如果你以互动方式工作,那么之后 read.csv 用保存数据 save(data, file="data.RData") ,关闭r,运行新实例,加载数据 load("data.RData") 然后看看它是否失败。

    但从这个错误消息中,我发现您在转换方面有问题,所以您应该看看这个问题。