我的谷歌驱动器中有几个 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
我想做同样的事情,但在这种情况下,文件更多,并且位于共享的谷歌驱动器中。 使用谷歌驱动器:
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 文件,因此我想避免每次都下载。 谢谢您的帮助。
我认为您有语法错误。尝试一下-
library(tidyverse)
create.df <- map_df(csv_files$id, ~read_csv(., col_types = cols(.default = "c")))
如果您想直接从谷歌驱动器读取文件,您应该首先下载桌面版谷歌驱动器,然后转到您的共享谷歌驱动器文件夹并将路径复制并粘贴到您的代码中
您使用的此网址适用于 Chrome 等浏览器,无法使用。
folder_url <- "https://drive.google.com/folder/directory" #path to the files
通过桌面版 Google Drive 工具打开共享的 Google Drive 文件夹,并在代码中使用该 url 路径。会起作用的。
老问题,但这可能对任何感兴趣的人有用-
使用
googledrive
功能,您可以找到您的文件夹以及您想要访问的文件的信息。然后,您使用 drive_read_string
将简化的数据带入 R,然后可以使用 read.csv
读取数据并将其添加到矩阵中。
require(tidyverse)
require(googledrive)
folder_url <- "YourfolderURL" #locate your folder
folder <- drive_get(as_id(folder_url)) #get the folder ID
csv_files <- drive_ls(folder, type = "csv") #specify the files type you're interested in. In this instance .csv's
get_file_fxn<- function(x){ #wrapped into a function for downloading multiple files
tmp<- drive_read_string(x) #converts the stored .csv file to a string
tmp_df<-tmp %>% read.csv(text= ., header = F) #reads the string and turns it back into a .csv file within R
tmp_df #print the output
}
data<- bind_rows(lapply(csv_files$id,get_file_fxn)) # Uses the newly created function to bind the output to rows of a matrix
也许不是很优雅,但它对我有用。