【发布时间】:2021-11-16 09:12:45
【问题描述】:
This is how csv_file object created below looks like on the console panel我在谷歌驱动器中有几个 csv 文件,我想在不将这些文件下载到本地计算机的情况下将它们附加为一个数据框。
通常当我从本地计算机调用多个文件时,我使用以下代码,其中 list.files 将所有这些 csv 文件放在一个列表中,然后 map_df 从列表中的所有这些文件中创建一个数据帧。
hourly.files <- list.files(path = "Folder_path_withCSV_files",
pattern = "*.csv",
full.names = T)%>%
map_df(~read_csv(., col_types = cols(.default = "c"))) #makes one dataframe
我也想这样做,但在这种情况下,文件更多,并且位于共享的 google 驱动器中。 使用谷歌驱动器:
folder_url <- "https://drive.google.com/folder/directory" #path to the files
folder <- drive_get(as_id(folder_url)) #folder id
csv_files <- drive_ls(folder, type = "csv") #makes a list of with all the csv files
然后,我尝试使用以下代码创建一个数据框:
create.df <- map_df(~read_csv(csv_files$id, col_types = cols(.default = "c")))
但在下面得到这个错误:
as_mapper(.f, ...) 中的错误:缺少参数“.f”,没有默认值
正如我所说,我不想在我的本地计算机上下载这些文件,因为它们太多了,我的合作者会不断地修改 google 文件夹中的 csv 文件,所以我想避免每次都下载。 感谢您的帮助。
【问题讨论】:
-
这有点难以准确说出来(我不知道 csv_files 是什么样的。但是当你运行一个 map 命令时,你首先需要知道要映射的内容。更像是 create .df
-
嗨,约翰·弗兰查克。谢谢你的建议。我添加了 csv_file 对象的外观图片(带有 ID 的运球)。我试过了,但我得到了这个错误 Error in .x$id : $ operator is invalid for atomic vectors
-
如果你想读取 csv_files$id 中的文件,我认为你不能使用 read_csv。 read_csv 可以从磁盘或 url 读取,但如果您通过 googledrive api 与 google drive 交互,则需要使用其中一个包函数(可以处理 google drive id)。由于您只使用工作表,您可能需要使用 googlesheets4 包。
-
谢谢@JohnFrankak。我会研究那个包,看看它是否适合我,因为我并没有真正使用 googlesheet ,这些是存储在共享谷歌驱动器中的 csv 文件。如果可行,我会更新这篇文章。
标签: r google-drive-api tidyverse google-drive-shared-drive