【问题标题】:Fastest way to import SPSS data into R as dataframe将 SPSS 数据作为数据框导入 R 的最快方法
【发布时间】:2018-05-30 17:15:16
【问题描述】:

我需要每天将 SPSS .sav 文件作为没有值标签的数据框导入 R。该文件有 120,000 多个 obs 并且还在增长。这个过程变得非常缓慢,所以我想确保我使用的是最快的方法。我一直在玩弄foreign、have 和 memisc 中的函数。如果有什么不同,我正在与 RDS 合作。

编辑:我的文件是 126343 x 33067 和 12.1 GB。我只是简单地运行以下代码:

library(haven)
data <- read_sav(file)

我无法共享此文件,但为了尝试复制,我做了:

library(haven)
n <- 126343
exd <- data.frame(c(replicate(2000, sample(letters, n, replace = TRUE),
                              simplify = FALSE),
                    replicate(1306, runif(n),
                              simplify = FALSE)))
dim(exd)
## [1] 126343    3306
tmp <- tempfile(fileext = ".sav")
write_sav(exd, tmp)
system.time(exd2 <- read_sav(tmp))
##   user  system elapsed 
##  173.34   13.94   187.66 

谢谢!

【问题讨论】:

  • 我最终将文件保存为 csvs 并使用 data.table fread 函数:

标签: r spss


【解决方案1】:

120000 不是很大。除非您的资源系统非常低,否则我根本不认为这会成为瓶颈。在我的中档笔记本电脑上,读取 122000 X 150 .sav 文件只需几秒钟:

library(haven)
n <- 122000
exd <- data.frame(c(replicate(50, sample(letters, n, replace = TRUE),
                              simplify = FALSE),
                    replicate(100, runif(n),
                              simplify = FALSE)))
dim(exd)
## [1] 122000    150
tmp <- tempfile(fileext = ".sav")
write_sav(exd, tmp)
system.time(exd2 <- read_sav(tmp))
##   user  system elapsed 
##  1.913   0.096   2.015 

由于我无法重现您所描述的问题,您应该提供更多详细信息以更清楚地说明问题所在。如果您展示代码和您正在使用的数据(子集或模拟),您可能会在识别可能的瓶颈时获得一些帮助。

【讨论】:

  • 抱歉,如果我不够具体,请参阅我更新的问题。
  • 我同意这可能是您的资源瓶颈,如果您没有足够的可用物理内存,它将交换到磁盘(速度较慢)。你有什么操作系统和多少内存?你能清理一些正在使用的内存吗? ls() 将列出您的变量 rm(var) 将清除您应该运行 gc() 进行垃圾收集的变量
【解决方案2】:

Haven 包(tidyverse 的一部分)是我的选择。但是还没有在这么大的数据集上使用过

https://github.com/tidyverse/haven

【讨论】:

  • 我今天早些时候从haven尝试了read_sav,但一个半小时后没有完成导入,我不得不退出RDS。
  • @Jklein RDS 和它有什么关系?你实际运行的是什么代码?
  • 令人惊讶的是,没有自述文件,表明对于某些 spss 文件它应该快 4 倍,但其他加载速度较慢,不确定原因。 rdocumentation.org/packages/haven/versions/0.2.0/readme
猜你喜欢
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 2012-10-22
相关资源
最近更新 更多