【问题标题】:Read many SPSS files at once in R在 R 中一次读取多个 SPSS 文件
【发布时间】:2017-07-06 23:31:24
【问题描述】:

我正在尝试将 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,等等。它没有不管数据帧的名称是什么,我只需要一个简单的代码就可以将它们全部读入数据帧。

【问题讨论】:

    标签: r


    【解决方案1】:

    目前,您的对象file_list 可能是字符向量,而不是列表。如果您希望生成的对象是一个列表,请尝试:

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

    这会生成一个文件名向量并将该向量强制为列表类对象。然后,我们将read.spss 应用于使用lapply 的文件名列表,并将结果分配给对象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

    【讨论】:

      【解决方案2】:

      终于成功了。与我在问题更新中放入的代码相同,但使用 Haven 而不是 foreign 略有不同:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-19
        • 2020-07-10
        • 1970-01-01
        • 2017-05-25
        • 2011-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多