如何用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
相关产品推荐
相关产品推荐

