首页 文章

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

提问于
浏览
0

我试图将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 . 我不知道在哪里可以放一个“as.data.frame”或类似的东西来得到我想要的东西 .

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

2 回答

  • 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)))
    
  • 0

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

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

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

    或者,您可以使用 sapplyread.spss 直接应用于字符向量对象(不将向量强制转换为列表):

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

    另见:Read multiple CSV files into separate data frames

相关问题