gpt4 book ai didi

r - 如何在R中下载谷歌工作表中的所有工作表

转载 作者:行者123 更新时间:2023-12-04 04:12:52 28 4
gpt4 key购买 nike

我希望在 R 中的单个谷歌工作表中下载所有工作表。
我目前正在使用 gsheet包裹来自 [maxconway][1] ,这允许我使用其 URL 下载工作表,但它仅适用于由 gid 区分的单个工作表。 .
我试图下载的一组谷歌表有 100 多张,这使得用 gsheet 一张一张地下载它们。非常不方便 - 有没有人知道任何 R 包可以自动执行此操作或以任何方式循环浏览单个谷歌工作表中的所有工作表?
这是我目前拥有的代码,它只下载 100 多张纸中的第一张作为小标题:

all_rolls <- gsheet2tbl('https://docs.google.com/spreadsheets/d/1OEg29XbL_YpO0m5JrLQpOPYTnxVsIg8iP67EYUrtRJg/edit#gid=26346344')

> head(all_rolls)
# A tibble: 6 x 14
Episode Time Character `Type of Roll` `Total Value` `Natural Value` `Crit?` `Damage Dealt` `# Kills`
<int> <drtn> <chr> <chr> <chr> <chr> <chr> <chr> <int>
1 1 37'53" Vex'ahlia Intelligence 20 18 <NA> <NA> NA
2 1 41'48" Grog Persuasion 19 18 <NA> <NA> NA
3 1 43'25" Keyleth Persuasion 2 2 <NA> <NA> NA
4 1 46'35" Tiberius Persuasion 12 3 <NA> <NA> NA
5 1 46'35" Tiberius Persuasion 27 18 <NA> <NA> NA
6 1 46'35" Percy Assist 21 15 <NA> <NA> NA
# … with 5 more variables: Notes <chr>, `Non-Roll Kills` <chr>, X12 <chr>, X13 <chr>, X14 <chr>

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

最佳答案

更新 2021-01-31 :更新代码以使用取代 sheets_find() 的新函数和 sheets_sheets()截至 googlesheets4版本 0.2.0。googlesheets4包包括列出与帐户的 Google Drive 关联的所有工作表的功能:sheets_find() .从工作表列表中,可以使用工作表 ID 将工作表读入 R。

library(googlesheets4)
sheets_auth()
theSheets <- gs4_find()
theSheets
我在 Google 上的测试帐户有一个 Google 表格,即 Pokémon Stats 的电子表格。
> theSheets
# A tibble: 1 x 3
name id drive_resource
* <chr> <chr> <list>
1 PokemonStats 13rGxY7ScDUl7bFJ9NipO7QUafEACYTH4MagFjcj4pVw <named list [34]>
我们可以使用 ID 字段下载工作表。
pokemonData <- sheets_read(theSheets$id[1])
head(pokemonData)


> head(pokemonData)
# A tibble: 6 x 13
Number Name Type1 Type2 Total HP Attack Defense SpecialAtk SpecialDef Speed
<dbl> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 Bulb… Grass Pois… 318 45 49 49 65 65 45
2 2 Ivys… Grass Pois… 405 60 62 63 80 80 60
3 3 Venu… Grass Pois… 525 80 82 83 100 100 80
4 3 Venu… Grass Pois… 625 80 100 123 122 120 80
5 4 Char… Fire NA 309 39 52 43 60 50 65
6 5 Char… Fire NA 405 58 64 58 80 65 80
# … with 2 more variables: Generation <dbl>, Legendary <lgl>
>
可以使用向量 theSheets$idlapply()从 Google Drive 读取一组工作表,如下所示:
sheetList <- lapply(theSheets$id,sheet_read)
要读取 Google Sheets 电子表格中的多个工作表,我们添加了 sheet=论据 sheet_read() .在这里,我们从 Pokémon Stats 电子表格的第二个工作表中读取 Pokémon Types。
pokemonTypes <- sheets_read(theSheets$id[1],sheet = 2)
head(pokemonTypes)
...和输出:
> head(pokemonTypes)
# A tibble: 6 x 1
Type
<chr>
1 Fire
2 Grass
3 Poison
4 Water
5 Bug
6 Fighting
>
读取电子表格中的所有工作表
我们可以自动化从单个电子表格中读取多个选项卡的过程。 sheets_sheets()函数对此很有用。
# technique where we read multiple worksheets by worksheet name
# using functions from googlesheets4 version 0.2.0.
theSheets <-gs4_find()
# get metadata from first sheet
sheetMetadata <- gs4_get(theSheets$id[1])
# get worksheet tab names
sheetNames <- sheet_names(theSheets$id[1])
sheetNames
此时我们可以看到 Pokémon Stats 电子表格中有两个工作表选项卡。我们使用向量 sheetNameslapply()阅读主电子表格中的所有工作表。
theWorksheets <- lapply(sheetNames, function(x){             
sheets_read(theSheets$id[1],sheet = x)
})
# use the `names()` function to name the data frames stored in the list
names(theWorksheets) <- sheetNames
lapply(theWorksheets,head)
...和输出:
> lapply(theWorksheets,head)
$Pokemon
# A tibble: 6 x 13
Number Name Type1 Type2 Total HP Attack Defense SpecialAtk SpecialDef Speed
<dbl> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 Bulb… Grass Pois… 318 45 49 49 65 65 45
2 2 Ivys… Grass Pois… 405 60 62 63 80 80 60
3 3 Venu… Grass Pois… 525 80 82 83 100 100 80
4 3 Venu… Grass Pois… 625 80 100 123 122 120 80
5 4 Char… Fire NA 309 39 52 43 60 50 65
6 5 Char… Fire NA 405 58 64 58 80 65 80
# … with 2 more variables: Generation <dbl>, Legendary <lgl>

$Metadata
# A tibble: 6 x 1
Type
<chr>
1 Fire
2 Grass
3 Poison
4 Water
5 Bug
6 Fighting

>
此时可以使用 $ 访问单个工作表。提取运算符的形式,如 theWorksheets$PokemontheWorksheets$Metadata .

关于r - 如何在R中下载谷歌工作表中的所有工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61422767/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com