mka*_*ane 7 r download google-sheets
我希望下载 R 中单个 google 工作表中的所有工作表。\n我目前正在使用 包gsheet,[maxconway][1]它允许我使用其 URL 下载工作表,但它仅适用于单个工作表,这\n我试图下载的一gid组 google 表格有超过 100 张表格,这使得一张一张地下载它们非常gsheet不方便 - 有谁知道任何 R 包可以自动执行此操作或以任何方式循环遍历单个 Google 工作表中的所有工作表?\n
这是我当前拥有的代码,它仅下载 100 多个工作表中的第一个作为 tibble:
all_rolls <- gsheet2tbl(\'https://docs.google.com/spreadsheets/d/1OEg29XbL_YpO0m5JrLQpOPYTnxVsIg8iP67EYUrtRJg/edit#gid=26346344\')\n\n> head(all_rolls)\n# A tibble: 6 x 14\n Episode Time Character `Type of Roll` `Total Value` `Natural Value` `Crit?` `Damage Dealt` `# Kills`\n <int> <drtn> <chr> <chr> <chr> <chr> <chr> <chr> <int>\n1 1 37\'53" Vex\'ahlia Intelligence 20 18 <NA> <NA> NA\n2 1 41\'48" Grog Persuasion 19 18 <NA> <NA> NA\n3 1 43\'25" Keyleth Persuasion 2 2 <NA> <NA> NA\n4 1 46\'35" Tiberius Persuasion 12 3 <NA> <NA> NA\n5 1 46\'35" Tiberius Persuasion 27 18 <NA> <NA> NA\n6 1 46\'35" Percy Assist 21 15 <NA> <NA> NA\n# \xe2\x80\xa6 with 5 more variables: Notes <chr>, `Non-Roll Kills` <chr>, X12 <chr>, X13 <chr>, X14 <chr>\nRun Code Online (Sandbox Code Playgroud)\n\n注意:我尝试删除该#gid字段,但随后它只下载第一张表。
更新 2021-01-31 :更新了代码以使用从版本 0.2.0sheets_find()开始替换的新函数。sheets_sheets()googlesheets4
该googlesheets4软件包包含一个列出与帐户的 Google Drive 关联的所有工作表的功能:sheets_find()。从工作表列表中,我们可以使用工作表 ID 将工作表读入 R。
library(googlesheets4)\nsheets_auth()\ntheSheets <- gs4_find()\ntheSheets\nRun Code Online (Sandbox Code Playgroud)\n我在 Google 上的测试帐户有一张 Google 工作表,即 Pok\xc3\xa9mon Stats 的电子表格。
\n> theSheets\n# A tibble: 1 x 3\n name id drive_resource \n* <chr> <chr> <list> \n1 PokemonStats 13rGxY7ScDUl7bFJ9NipO7QUafEACYTH4MagFjcj4pVw <named list [34]>\nRun Code Online (Sandbox Code Playgroud)\n我们可以使用 ID 字段来下载该表。
\npokemonData <- sheets_read(theSheets$id[1])\nhead(pokemonData)\n\n\n> head(pokemonData)\n# A tibble: 6 x 13\n Number Name Type1 Type2 Total HP Attack Defense SpecialAtk SpecialDef Speed\n <dbl> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>\n1 1 Bulb\xe2\x80\xa6 Grass Pois\xe2\x80\xa6 318 45 49 49 65 65 45\n2 2 Ivys\xe2\x80\xa6 Grass Pois\xe2\x80\xa6 405 60 62 63 80 80 60\n3 3 Venu\xe2\x80\xa6 Grass Pois\xe2\x80\xa6 525 80 82 83 100 100 80\n4 3 Venu\xe2\x80\xa6 Grass Pois\xe2\x80\xa6 625 80 100 123 122 120 80\n5 4 Char\xe2\x80\xa6 Fire NA 309 39 52 43 60 50 65\n6 5 Char\xe2\x80\xa6 Fire NA 405 58 64 58 80 65 80\n# \xe2\x80\xa6 with 2 more variables: Generation <dbl>, Legendary <lgl>\n> \nRun Code Online (Sandbox Code Playgroud)\n人们可以使用向量theSheets$idwithlapply()从 Google Drive 读取一组工作表,如下所示:
sheetList <- lapply(theSheets$id,sheet_read)\nRun Code Online (Sandbox Code Playgroud)\n要读取 Google Sheets 电子表格中的多个工作表,我们将参数添加sheet=到sheet_read(). 在这里,我们从 Pok\xc3\xa9mon 统计电子表格中的第二个工作表中读取 Pok\xc3\xa9mon 类型。
pokemonTypes <- sheets_read(theSheets$id[1],sheet = 2)\nhead(pokemonTypes)\nRun Code Online (Sandbox Code Playgroud)\n...以及输出:
\n> head(pokemonTypes)\n# A tibble: 6 x 1\n Type \n <chr> \n1 Fire \n2 Grass \n3 Poison \n4 Water \n5 Bug \n6 Fighting\n> \nRun Code Online (Sandbox Code Playgroud)\n我们可以自动化从单个电子表格读取多个选项卡的过程。该sheets_sheets()函数对于此目的很有用。
# technique where we read multiple worksheets by worksheet name\n# using functions from googlesheets4 version 0.2.0. \ntheSheets <-gs4_find()\n# get metadata from first sheet\nsheetMetadata <- gs4_get(theSheets$id[1])\n# get worksheet tab names\nsheetNames <- sheet_names(theSheets$id[1])\nsheetNames\nRun Code Online (Sandbox Code Playgroud)\n此时我们可以看到 Pok\xc3\xa9mon Stats 电子表格中有两个工作表选项卡。我们使用向量sheetNames来lapply()读取主电子表格中的所有工作表。
theWorksheets <- lapply(sheetNames, function(x){ \n sheets_read(theSheets$id[1],sheet = x) \n})\n# use the `names()` function to name the data frames stored in the list\nnames(theWorksheets) <- sheetNames\nlapply(theWorksheets,head)\nRun Code Online (Sandbox Code Playgroud)\n...以及输出:
\n> lapply(theWorksheets,head)\n$Pokemon\n# A tibble: 6 x 13\n Number Name Type1 Type2 Total HP Attack Defense SpecialAtk SpecialDef Speed\n <dbl> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>\n1 1 Bulb\xe2\x80\xa6 Grass Pois\xe2\x80\xa6 318 45 49 49 65 65 45\n2 2 Ivys\xe2\x80\xa6 Grass Pois\xe2\x80\xa6 405 60 62 63 80 80 60\n3 3 Venu\xe2\x80\xa6 Grass Pois\xe2\x80\xa6 525 80 82 83 100 100 80\n4 3 Venu\xe2\x80\xa6 Grass Pois\xe2\x80\xa6 625 80 100 123 122 120 80\n5 4 Char\xe2\x80\xa6 Fire NA 309 39 52 43 60 50 65\n6 5 Char\xe2\x80\xa6 Fire NA 405 58 64 58 80 65 80\n# \xe2\x80\xa6 with 2 more variables: Generation <dbl>, Legendary <lgl>\n\n$Metadata\n# A tibble: 6 x 1\n Type \n <chr> \n1 Fire \n2 Grass \n3 Poison \n4 Water \n5 Bug \n6 Fighting\n\n> \nRun Code Online (Sandbox Code Playgroud)\n此时,可以使用$提取运算符 astheWorksheets$Pokemon或 的形式访问各个工作表theWorksheets$Metadata。