如何在 R 中下载 google 工作表中的所有工作表

mka*_*ane 7 r download google-sheets

我希望下载 R 中单个 google 工作表中的所有工作表。\n我目前正在使用 包gsheet[maxconway][1]它允许我使用其 URL 下载工作表,但它仅适用于单个工作表,这\n我试图下载的一gid组 google 表格有超过 100 张表格,这使得一张一张地下载它们非常gsheet不方便 - 有谁知道任何 R 包可以自动执行此操作或以任何方式循环遍历单个 Google 工作表中的所有工作表?\n
这是我当前拥有的代码,它仅下载 100 多个工作表中的第一个作为 tibble:

\n\n
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>\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意:我尝试删除该#gid字段,但随后它只下载第一张表。

\n

Len*_*ski 5

更新 2021-01-31 :更新了代码以使用从版本 0.2.0sheets_find()开始替换的新函数。sheets_sheets()googlesheets4

\n

googlesheets4软件包包含一个列出与帐户的 Google Drive 关联的所有工作表的功能:sheets_find()。从工作表列表中,我们可以使用工作表 ID 将工作表读入 R。

\n
library(googlesheets4)\nsheets_auth()\ntheSheets <- gs4_find()\ntheSheets\n
Run 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]>\n
Run Code Online (Sandbox Code Playgroud)\n

我们可以使用 ID 字段来下载该表。

\n
pokemonData <- 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> \n
Run Code Online (Sandbox Code Playgroud)\n

人们可以使用向量theSheets$idwithlapply()从 Google Drive 读取一组工作表,如下所示:

\n
sheetList <- lapply(theSheets$id,sheet_read)\n
Run Code Online (Sandbox Code Playgroud)\n

要读取 Google Sheets 电子表格中的多个工作表,我们将参数添加sheet=sheet_read(). 在这里,我们从 Pok\xc3\xa9mon 统计电子表格中的第二个工作表中读取 Pok\xc3\xa9mon 类型。

\n
pokemonTypes <- sheets_read(theSheets$id[1],sheet = 2)\nhead(pokemonTypes)\n
Run 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> \n
Run Code Online (Sandbox Code Playgroud)\n

读取电子表格中的所有工作表

\n

我们可以自动化从单个电子表格读取多个选项卡的过程。该sheets_sheets()函数对于此目的很有用。

\n
# 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\n
Run Code Online (Sandbox Code Playgroud)\n

此时我们可以看到 Pok\xc3\xa9mon Stats 电子表格中有两个工作表选项卡。我们使用向量sheetNameslapply()读取主电子表格中的所有工作表。

\n
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)\n
Run 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> \n
Run Code Online (Sandbox Code Playgroud)\n

此时,可以使用$提取运算符 astheWorksheets$Pokemon或 的形式访问各个工作表theWorksheets$Metadata

\n