我正在尝试将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;无论数据帧的名称是什么,我只需要一个简单的代码就可以将它们全部读入数据帧。
答案 0 :(得分:0)
目前,您的对象file_list
可能是字符向量,而不是列表。如果您希望将结果对象作为列表,请尝试:
library(foreign)
file_list <- as.list(list.files())
res <- lapply(file_list, read.spss, to.data.frame = TRUE)
这将生成一个文件名和强制向量,该向量可以向列表类对象传递。然后,我们使用read.spss
将lapply
应用于文件名列表,并将结果分配给对象res
。
或者,您可以使用read.spss
将sapply
直接应用于角色向量对象(不将向量强制转换为列表):
file_vector <- list.files()
res <- sapply(file_vector, read.spss, to.data.frame = TRUE)
答案 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)))