Пакет googlesheets4
включает функцию для вывода списка всех листов, связанных с Google Диском учетной записи: sheets_find()
. Из списка листов можно использовать идентификаторы листов для считывания листов в R.
library(googlesheets4)
sheets_auth()
theSheets <- sheets_find()
theSheets
В моем тестовом аккаунте в Google есть один лист Google, электронная таблица со статистикой покемонов.
> 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$id
с lapply()
для чтения группы листов с Google Диска следующим образом:
sheetList <- lapply(theSheets$id,sheet_read)
Для чтения нескольких рабочих листов в Google Sheets В электронную таблицу мы добавляем аргумент sheet=
к sheet_read()
. Здесь мы читаем «Типы покемонов» со второй таблицы в таблице «Статистика покемонов».
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
theSheets <- sheets_find()
# get metadata from first sheet
sheetMetadata <- sheets_get(theSheets$id[1])
# get worksheet tab names
sheetNames <- sheets_sheets(theSheets$id[1])
sheetNames
На данный момент мы видим, что есть две вкладки рабочего листа в электронной таблице Покемонов. Мы используем вектор sheetNames
с lapply()
, чтобы прочитать все рабочие листы в основной электронной таблице.
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$Pokemon
или theWorksheets$Metadata
.