使用R语言unz函数解压OECD PISA数据集文件失败求助
问题原因与解决方法
核心原因
你遇到的问题大概率是zip文件内部路径与你指定的路径不匹配,常见两种情况:
- zip包含根目录前缀:OECD部分PISA数据集的zip文件解压后,会生成一个与zip文件名同名的根目录(比如
SPSS_STU_TTM.zip内部实际结构是SPSS_STU_TTM/TTM/CY07_MSU_STU_TTM.sav)。你手动打开zip时可能自动进入了这个根目录,误以为文件直接在TTM/下,但实际zip内的路径需要加上根目录前缀。 - 大小写不匹配:Windows系统下手动浏览zip不区分大小写,但R的
unz()函数在Windows环境下严格区分文件名大小写,如果zip内的文件名是小写(比如cy07_msu_stu_ttm.sav),而你写的是大写路径,就会找不到文件。
排查与解决步骤
1. 确认zip内的真实路径
执行以下代码查看zip文件的完整内部结构,明确正确的文件路径:
unzip(temp, list = TRUE)
输出结果会显示所有文件的真实路径,比如可能会看到:
Name Length Date 1 SPSS_STU_TTM/TTM/CY07_MSU_STU_TTM.sav 1234567 2020-01-01 00:00:00
2. 修正路径后读取
根据真实路径调整代码,比如路径为SPSS_STU_TTM/TTM/CY07_MSU_STU_TTM.sav时:
library(haven) temp <- tempfile() download.file("https://webfs.oecd.org/pisa2018/SPSS_STU_TTM.zip", temp) dflab <- read_sav( unz(temp, "SPSS_STU_TTM/TTM/CY07_MSU_STU_TTM.sav"))
3. 替代方案:先解压再读取(更稳妥)
如果unz()仍有问题,可先将zip解压到临时目录再读取,这种方法能避免多数压缩格式或路径解析问题:
library(haven) temp <- tempfile() download.file("https://webfs.oecd.org/pisa2018/SPSS_STU_TTM.zip", temp) # 创建临时解压目录 temp_dir <- tempdir() # 解压整个zip unzip(temp, exdir = temp_dir) # 拼接正确的文件路径(根据unzip(list=TRUE)的结果调整) sav_file_path <- file.path(temp_dir, "SPSS_STU_TTM", "TTM", "CY07_MSU_STU_TTM.sav") # 读取数据 dflab <- read_sav(sav_file_path)
内容的提问来源于stack exchange,提问作者pluke
相关产品推荐
相关产品推荐

