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

如何用R迭代提取Google Drive子文件夹内的.xlsx数据集?

问题分析与解决方案

你的代码存在几个核心问题,导致无法批量读取目标文件:

  • 仅传入单个URL,for循环遍历的是字符串的每个字符而非多个子文件夹路径
  • 下载和读取后未将数据存储,读取结果直接被丢弃
  • Google Drive的普通URL无法直接用download.file下载,需要处理权限和文件ID

修正步骤与代码

1. 准备工作:安装必要包

首先确保安装并加载所需的包:

install.packages(c("googledrive", "readxl", "dplyr"))
library(googledrive)
library(readxl)
library(dplyr)

2. 授权Google Drive访问

运行以下代码完成授权(首次运行会跳转到浏览器登录):

drive_auth()

3. 批量读取核心代码

假设主文件夹的ID可以从Google Drive URL中提取(比如URL为https://drive.google.com/drive/folders/XXX,XXX就是文件夹ID),代码如下:

# 替换为你的主文件夹ID
main_folder_id <- "你的主文件夹ID"

# 获取主文件夹下所有符合命名规律的子文件夹
sub_folders <- drive_ls(path = as_id(main_folder_id)) %>%
  filter(grepl("你的命名规律正则表达式", name)) # 比如grepl("^data_", name)匹配以data_开头的文件夹

# 初始化列表存储所有数据
all_data <- list()

# 遍历子文件夹读取文件
for (i in seq_len(nrow(sub_folders))) {
  folder_name <- sub_folders$name[i]
  # 查找子文件夹内同名的xlsx文件
  target_file <- drive_ls(path = as_id(sub_folders$id[i])) %>%
    filter(name == paste0(folder_name, ".xlsx"))
  
  if (nrow(target_file) > 0) {
    # 下载临时文件
    temp_file <- tempfile(fileext = ".xlsx")
    drive_download(file = as_id(target_file$id), path = temp_file, overwrite = TRUE)
    # 读取数据并存储
    all_data[[folder_name]] <- read_xlsx(temp_file)
    # 删除临时文件
    file.remove(temp_file)
  } else {
    warning(paste("文件夹", folder_name, "中未找到同名xlsx文件"))
  }
}

# 可选:将列表合并为单个数据框(如果所有数据结构一致)
combined_data <- bind_rows(all_data, .id = "来源文件夹")

关键说明

  • 文件夹ID获取:打开Google Drive主文件夹,URL中folders/后面的字符串就是ID
  • 命名规律匹配:用grepl函数的正则表达式筛选目标子文件夹,比如grepl("202[0-9]_report", name)匹配2020-2029年的报告文件夹
  • 数据存储:用列表存储每个文件夹的数据,方便后续单独处理;如果结构一致可以合并为单个数据框

内容的提问来源于stack exchange,提问作者12666727b9

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:43:22