You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:50:24