當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R googlesheets4 range_read 將工作表讀入 DataFrame 中


這是 googlesheets4 包的主要 "read" 函數。它有兩個名稱,因為我們希望它在兩個上下文中有意義:

  • read_sheet() 喚起其他 table-reading 函數,例如 readr::read_csv()readxl::read_excel() 。本例中的 sheet 指的是 Google(電子表格)表。

  • 根據 googlesheets4 包中使用的命名約定,range_read() 是正確的名稱。

read_sheet()range_read() 是同義詞,您可以使用其中之一。

用法

range_read(
  ss,
  sheet = NULL,
  range = NULL,
  col_names = TRUE,
  col_types = NULL,
  na = "",
  trim_ws = TRUE,
  skip = 0,
  n_max = Inf,
  guess_max = min(1000, n_max),
  .name_repair = "unique"
)

read_sheet(
  ss,
  sheet = NULL,
  range = NULL,
  col_names = TRUE,
  col_types = NULL,
  na = "",
  trim_ws = TRUE,
  skip = 0,
  n_max = Inf,
  guess_max = min(1000, n_max),
  .name_repair = "unique"
)

參數

ss

識別 Google 表格的內容:

  • 其文件 ID 作為字符串或 drive_id

  • 我們可以從中恢複 id 的 URL

  • one-row dribble ,這就是 googledrive 表示雲端硬盤文件的方式

  • googlesheets4_spreadsheet 的實例,這就是 gs4_get() 返回的內容

通過 as_sheets_id() 處理。

sheet

要閱讀的表,在 "worksheet" 或 "tab" 的意義上。您可以通過名稱(使用字符串)或位置(使用數字)來標識工作表。如果通過 range 指定工作表,則忽略。如果兩個參數都沒有指定工作表,則默認為第一個可見工作表。

range

要讀取的單元格範圍。如果是 NULL ,則讀取所有非空單元格。否則,請按照 Sheets A1 notation 中的說明指定 range 或使用 cell-specification 中記錄的幫助程序。 Sheets 使用相當標準的電子表格範圍表示法,盡管與 Excel 略有不同。有效範圍示例: "Sheet1!A1:B2""Sheet1!A:A""Sheet1!1:2""Sheet1!A5:A""A1:B2""Sheet1" 。嚴格解釋,即使範圍強製包含前導、尾隨或嵌入的空行或列。優先於 skipn_maxsheet 。注意 range 可以是命名範圍,如 "sales_data" ,沒有任何單元格引用。

col_names

TRUE 使用第一行作為列名稱,FALSE 獲取默認名稱,或使用字符向量直接提供列名稱。如果用戶提供 col_typescol_names 每列可以有一個條目,或者每個未跳過的列有一個條目。

col_types

列類型。從電子表格中猜測所有內容的 NULL 或一串 readr-style 短代碼,每列一個字符或代碼。如果恰好指定了一個col_type,則將其回收。有關更多信息,請參閱色譜柱規格。

na

要解釋為缺失值的字符串的字符向量。默認情況下,空白單元格被視為缺失數據。

trim_ws

邏輯性強。是否應該從單元格內容中刪除前導和尾隨空格?

skip

在讀取任何內容(無論是列名還是數據)之前要跳過的最小行數。前導空行會自動跳過,因此這是一個下限。如果給出range,則忽略。

n_max

要解析為返回的 tibble 的最大數據行數。尾隨空行將被自動跳過,因此這是結果中行數的上限。如果給出range,則忽略。 n_max 在讀取所有非空單元格後在本地強製執行,因此,如果速度是一個問題,最好使用 range

guess_max

用於猜測列類型的最大數據行數。

.name_repair

列名的處理。默認情況下,googlesheets4 確保列名稱不為空並且是唯一的。完全支持 .name_repair,如 tibble::tibble() 中所述。

tibble

色譜柱規格

列類型必須在 readr-style 短代碼的單個字符串中指定,例如"cci?l"表示“字符、字符、整數、猜測、邏輯”。這不是 googlesheets4 的 col 規範最終的結果,但它以與 readr 一致的方式滾動,並且不會重新發明任何輪子。

列類型的簡碼:

  • _- :跳過。跳過的列中的數據仍然從 API 請求(此包中的高級函數是rectangle-oriented),但不會解析到數據幀輸出中。

  • ?:猜猜。猜測每個單元格的類型,然後為該列選擇一致類型。如果沒有原子類型適合所有單元格,則會創建一個列表列,其中每個單元格都會轉換為 "best" 類型的 R 對象。如果未指定列類型,即 col_types = NULL ,則猜測所有類型。

  • l:邏輯。

  • i:整數。這種類型永遠不會從數據中猜測出來,因為工作表沒有正式的整數單元格類型。

  • dn :數字,即"double"。

  • D:日期。這種類型永遠不會從數據中猜測出來,因為日期單元格隻是帶有 "date" 格式的串行日期時間。

  • t:一天中的時間。這種類型永遠不會從數據中猜測出來,因為時間單元隻是帶有 "time" 格式的串行日期時間。尚未實施;返回 POSIXct。

  • T:日期時間,特別是 POSIXct。

  • c:角色。

  • C:單元格。這種類型是 googlesheets4 所獨有的。這將返回原始單元格數據,作為 R 列表,其中包含 Sheets API 為該單元格發送的所有內容。具有 "CELL_SOMETHING""SHEETS_CELL" 的 S3 類型。大多數在內部有用,但向那些想要直接訪問(例如公式和格式)的人公開。

  • L:列表,如"list-column"。每個單元都是其發現類型的長度為 1 的原子向量。

  • 後續內容:持續時間(代碼為 : )和因子(代碼為 f )。

例子

ss <- gs4_example("deaths")
read_sheet(ss, range = "A5:F15")
#> ✔ Reading from deaths.
#> ✔ Range A5:F15.
#> # A tibble: 10 × 6
#>    Name               Profession   Age `Has kids` `Date of birth`    
#>    <chr>              <chr>      <dbl> <lgl>      <dttm>             
#>  1 David Bowie        musician      69 TRUE       1947-01-08 00:00:00
#>  2 Carrie Fisher      actor         60 TRUE       1956-10-21 00:00:00
#>  3 Chuck Berry        musician      90 TRUE       1926-10-18 00:00:00
#>  4 Bill Paxton        actor         61 TRUE       1955-05-17 00:00:00
#>  5 Prince             musician      57 TRUE       1958-06-07 00:00:00
#>  6 Alan Rickman       actor         69 FALSE      1946-02-21 00:00:00
#>  7 Florence Henderson actor         82 TRUE       1934-02-14 00:00:00
#>  8 Harper Lee         author        89 FALSE      1926-04-28 00:00:00
#>  9 Zsa Zsa Gábor      actor         99 TRUE       1917-02-06 00:00:00
#> 10 George Michael     musician      53 FALSE      1963-06-25 00:00:00
#> # ℹ 1 more variable: `Date of death` <dttm>
read_sheet(ss, range = "other!A5:F15", col_types = "ccilDD")
#> ✔ Reading from deaths.
#> ✔ Range ''other'!A5:F15'.
#> # A tibble: 10 × 6
#>    Name        Profession   Age `Has kids` `Date of birth` `Date of death`
#>    <chr>       <chr>      <int> <lgl>      <date>          <date>         
#>  1 Vera Rubin  scientist     88 TRUE       1928-07-23      2016-12-25     
#>  2 Mohamed Ali athlete       74 TRUE       1942-01-17      2016-06-03     
#>  3 Morley Saf… journalist    84 TRUE       1931-11-08      2016-05-19     
#>  4 Fidel Cast… politician    90 TRUE       1926-08-13      2016-11-25     
#>  5 Antonin Sc… lawyer        79 TRUE       1936-03-11      2016-02-13     
#>  6 Jo Cox      politician    41 TRUE       1974-06-22      2016-06-16     
#>  7 Janet Reno  lawyer        78 FALSE      1938-07-21      2016-11-07     
#>  8 Gwen Ifill  journalist    61 FALSE      1955-09-29      2016-11-14     
#>  9 John Glenn  astronaut     95 TRUE       1921-07-28      2016-12-08     
#> 10 Pat Summit  coach         64 TRUE       1952-06-14      2016-06-28     
read_sheet(ss, range = "arts_data", col_types = "ccilDD")
#> ✔ Reading from deaths.
#> ✔ Range arts_data.
#> # A tibble: 10 × 6
#>    Name        Profession   Age `Has kids` `Date of birth` `Date of death`
#>    <chr>       <chr>      <int> <lgl>      <date>          <date>         
#>  1 David Bowie musician      69 TRUE       1947-01-08      2016-01-10     
#>  2 Carrie Fis… actor         60 TRUE       1956-10-21      2016-12-27     
#>  3 Chuck Berry musician      90 TRUE       1926-10-18      2017-03-18     
#>  4 Bill Paxton actor         61 TRUE       1955-05-17      2017-02-25     
#>  5 Prince      musician      57 TRUE       1958-06-07      2016-04-21     
#>  6 Alan Rickm… actor         69 FALSE      1946-02-21      2016-01-14     
#>  7 Florence H… actor         82 TRUE       1934-02-14      2016-11-24     
#>  8 Harper Lee  author        89 FALSE      1926-04-28      2016-02-19     
#>  9 Zsa Zsa Gá… actor         99 TRUE       1917-02-06      2016-12-18     
#> 10 George Mic… musician      53 FALSE      1963-06-25      2016-12-25     

read_sheet(gs4_example("mini-gap"))
#> ✔ Reading from mini-gap.
#> ✔ Range Africa.
#> # A tibble: 5 × 6
#>   country      continent  year lifeExp     pop gdpPercap
#>   <chr>        <chr>     <dbl>   <dbl>   <dbl>     <dbl>
#> 1 Algeria      Africa     1952    43.1 9279525     2449.
#> 2 Angola       Africa     1952    30.0 4232095     3521.
#> 3 Benin        Africa     1952    38.2 1738315     1063.
#> 4 Botswana     Africa     1952    47.6  442308      851.
#> 5 Burkina Faso Africa     1952    32.0 4469979      543.
read_sheet(
  gs4_example("mini-gap"),
  sheet = "Europe",
  range = "A:D",
  col_types = "ccid"
)
#> ✔ Reading from mini-gap.
#> ✔ Range ''Europe'!A:D'.
#> # A tibble: 5 × 4
#>   country                continent  year lifeExp
#>   <chr>                  <chr>     <int>   <dbl>
#> 1 Albania                Europe     1952    55.2
#> 2 Austria                Europe     1952    66.8
#> 3 Belgium                Europe     1952    68  
#> 4 Bosnia and Herzegovina Europe     1952    53.8
#> 5 Bulgaria               Europe     1952    59.6
源代碼:R/range_read.R

相關用法


注:本文由純淨天空篩選整理自Jennifer Bryan等大神的英文原創作品 Read a Sheet into a data frame。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。