在R中一次读取许多SPSS文件

时间:2017-07-06 23:31:25

标签: r

我正在尝试将R中文件夹中的所有SPSS文件读取到不同的data.frames。我只需要,所有这些文件都读入R数据帧。

我相信我需要一个for循环或者一些lapply或sapply的解决方案。我已尝试过循环或lapply的许多选项,但我得到的最好的是创建所有数据。

我到目前为止所做的最好的是使用以下代码(改编自打开多个CSV文件的解决方案):

library(foreign)

filenames <- list.files()

filelist <- lapply(filenames, read.spss, to.data.frame = TRUE)

names(filelist) <- c("nic", "hon", "chi", "cr", "repdom", "ecu", "col", 
"sal", "par", "mex", "arg", "gua", "pan", "uru", "bra")

invisible(lapply(names(filelist), function(x)  
assign(x,filelist[[x]],envir=.GlobalEnv)))

使用此代码,我读取了所有文件,但是作为列表,而不是data.frames。我不知道在哪里可以放置一个&#34; as.data.frame&#34;或类似的东西来得到我想要的东西。

也许解决方案是循环文件夹中的所有文件,以便列表中的第一个元素(第一个文件)将被读取为df.1,然后是df.2等。它不会&# 39;无论数据帧的名称是什么,我只需要一个简单的代码就可以将它们全部读入数据帧。

2 个答案:

答案 0 :(得分:0)

目前,您的对象file_list可能是字符向量,而不是列表。如果您希望将结果对象作为列表,请尝试:

library(foreign)

file_list <- as.list(list.files())
res <- lapply(file_list, read.spss, to.data.frame = TRUE)

这将生成一个文件名和强制向量,该向量可以向列表类对象传递。然后,我们使用read.spsslapply应用于文件名列表,并将结果分配给对象res

或者,您可以使用read.spsssapply直接应用于角色向量对象(不将向量强制转换为列表):

file_vector <- list.files()
res <- sapply(file_vector, read.spss, to.data.frame = TRUE)

另请参阅:Read multiple CSV files into separate data frames

答案 1 :(得分:0)

终于奏效了。与我提出的问题更新相同的代码,但使用避免而不是外国的细微差别:

library(haven) 

filenames <- list.files()

filelist <- lapply(filenames, read_spss)

names(filelist) <- c("nic", "hon", "chi", "cr", "repdom", "ecu", "col", 
"sal", "par", "mex", "arg", "gua", "pan", "uru", "bra")

invisible(lapply(names(filelist), function(x) 
assign(x,filelist[[x]],envir=.GlobalEnv)))