从Google Drive文件夹中读取多个CSV文件,然后在R中添加一个CSV文件

hvvq6cgz  于 2023-09-27  发布在  Go
关注(0)|答案(3)|浏览(124)

This is how csv_file object created below looks like on the console panel我有几个csv文件在谷歌驱动器,我想附加为一个 Dataframe witout下载这些文件在我的本地计算机。
通常,当我从本地计算机调用多个文件时,我使用以下代码,其中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 Drive:

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

然后,我尝试使用以下代码创建一个dataframe:create.df <- map_df(~read_csv(csv_files$id, col_types = cols(.default = "c")))但得到以下错误:as_mapper(.f,...)中的错误:缺少参数“.f”,没有默认值
正如我所说,我不想下载这些文件在我的本地计算机,因为有太多,我的合作者将我修改的csv文件在谷歌文件夹不断,所以每次下载是我想避免的。谢谢你的帮助。

nue99wik

nue99wik1#

我认为你有一个语法错误。你试试-

library(tidyverse)

create.df <- map_df(csv_files$id, ~read_csv(., col_types = cols(.default = "c")))
pgvzfuti

pgvzfuti2#

如果你想直接从你的谷歌驱动器读取文件,你应该先下载Google Drive for desktop,然后去你的共享谷歌驱动器文件夹,复制并粘贴路径到你的代码
您正在使用的URL是为您的浏览器,如Chrome,将无法工作。

folder_url <- "https://drive.google.com/folder/directory" #path to the files

通过google drive for desktop工具打开共享的google drive文件夹,并在代码中使用该url路径。会成功的

smdnsysy

smdnsysy3#

老问题了,但这可能对任何感兴趣的人都有用-
使用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

也许不是很优雅,但它对我很有效。

相关问题