将SPSS数据导入R作为数据帧的最快方法

时间:2018-05-30 17:15:16

标签: r spss

我需要每天将一个SPSS .sav文件作为没有值标签的数据框导入到R中。该文件是120,000+ obs并且正在增长。这个过程变得非常慢,所以我想确保我使用最快的方法。我一直在玩外国,避风港和memisc的功能。如果有所作为,我正在使用RDS。

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

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 

谢谢!

2 个答案:

答案 0 :(得分: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 

由于我无法像您所描述的那样重现问题,因此您应该提供更多详细信息,以便更清楚地解决问题所在。如果您显示您正在使用的数据的代码和(子集或模拟),您可能会获得一些帮助来确定可能的瓶颈。

答案 1 :(得分:0)

避风港套餐(tidyverse的一部分)将是我的选择。但是没有把它用在数据集上那么大

https://github.com/tidyverse/haven