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


R tidyr pivot_longer_spec 使用規範將數據從寬轉為長


這是一個低級數據透視接口,受 cdata 包啟發,允許您使用 DataFrame 說明數據透視。

用法

pivot_longer_spec(
  data,
  spec,
  ...,
  cols_vary = "fastest",
  names_repair = "check_unique",
  values_drop_na = FALSE,
  values_ptypes = NULL,
  values_transform = NULL,
  error_call = current_env()
)

build_longer_spec(
  data,
  cols,
  ...,
  names_to = "name",
  values_to = "value",
  names_prefix = NULL,
  names_sep = NULL,
  names_pattern = NULL,
  names_ptypes = NULL,
  names_transform = NULL,
  error_call = current_env()
)

參數

data

要旋轉的 DataFrame 。

spec

規範 DataFrame 。這對於更複雜的數據透視非常有用,因為它可以讓您更好地控製存儲在列名稱中的元數據如何轉換為結果中的列。

必須是包含字符.name.value 列的 DataFrame 。 spec 中的其他列應命名為與數據集長格式的列匹配,並包含與從寬格式轉換的列相對應的值。特殊的 .seq 變量用於在內部消除行的歧義;旋轉後它會自動移除。

...

這些點用於將來的擴展,並且必須為空。

cols_vary

當將 cols 轉換為更長的格式時,輸出行應如何相對於其原始行號排列?

  • "fastest"(默認值)將 cols 中的各個行在輸出中保持靠近在一起。當 data 中至少有一個不參與旋轉過程的鍵列時,這通常會產生直觀的有序輸出。

  • "slowest"cols 中的各個列在輸出中緊密結合在一起。當您在旋轉過程中使用 data 中的所有列時,這通常會產生直觀有序的輸出。

names_repair

如果輸出具有無效的列名稱,會發生什麽情況?默認情況下,如果列重複,"check_unique" 將出錯。使用 "minimal" 允許輸出中存在重複項,或使用 "unique" 通過添加數字後綴來消除重複項。有關更多選項,請參閱vctrs::vec_as_names()

values_drop_na

如果 TRUE ,將刪除 value_to 列中僅包含 NA 的行。這有效地將顯式缺失值轉換為隱式缺失值,通常僅當 data 中的缺失值由其結構創建時才使用。

error_call

當前運行函數的執行環境,例如caller_env() 。該函數將在錯誤消息中作為錯誤源被提及。有關詳細信息,請參閱 abort()call 參數。

cols

< tidy-select > 要轉換為更長格式的列。

names_to

一個字符向量,指定要根據 cols 指定的 data 的列名稱中存儲的信息創建的新列。

  • 如果長度為 0,或者提供NULL,則不會創建任何列。

  • 如果長度為 1,將創建一個列,其中包含 cols 指定的列名稱。

  • 如果長度 >1,將創建多列。在這種情況下,必須提供 names_sepnames_pattern 之一來指定如何拆分列名。您還可以利用兩個額外的字符值:

    • NA 將丟棄列名的相應組成部分。

    • ".value" 表示列名稱的相應組件定義包含單元格值的輸出列的名稱,完全覆蓋values_to

values_to

一個字符串,指定要根據單元格值中存儲的數據創建的列的名稱。如果names_to是包含特殊.value標記的字符,則該值將被忽略,並且值列的名稱將從部分現有列名稱派生。

names_prefix

用於從每個變量名稱開頭刪除匹配文本的正則表達式。

names_sep, names_pattern

如果 names_to 包含多個值,這些參數控製列名的分解方式。

names_sep 采用與 separate() 相同的規範,並且可以是數字向量(指定要中斷的位置),也可以是單個字符串(指定要拆分的正則表達式)。

names_pattern 采用與 extract() 相同的規範,即包含匹配組的正則表達式 (() )。

如果這些參數沒有給您足夠的控製權,請使用 pivot_longer_spec() 創建規範對象並根據需要手動處理。

names_ptypes, values_ptypes

(可選)列 name-prototype 對的列表。或者,可以提供一個空原型,它將應用於所有列。原型(或簡稱 ptype)是一個零長度向量(如 integer()numeric() ),它定義向量的類型、類和屬性。如果您想確認創建的列是您期望的類型,請使用這些參數。請注意,如果您想更改(而不是確認)特定列的類型,則應使用names_transformvalues_transform 代替。

names_transform, values_transform

(可選)列 name-function 對的列表。或者,可以提供單個函數,該函數將應用於所有列。如果需要更改特定列的類型,請使用這些參數。例如,names_transform = list(week = as.integer) 會將名為 week 的字符變量轉換為整數。

如果未指定,names_to 生成的列的類型將為字符,values_to 生成的變量的類型將為用於生成它們的輸入列的通用類型。

例子

# See vignette("pivot") for examples and explanation

# Use `build_longer_spec()` to build `spec` using similar syntax to `pivot_longer()`
# and run `pivot_longer_spec()` based on `spec`.
spec <- relig_income %>% build_longer_spec(
  cols = !religion,
  names_to = "income",
  values_to = "count"
)
spec
#> # A tibble: 10 × 3
#>    .name              .value income            
#>    <chr>              <chr>  <chr>             
#>  1 <$10k              count  <$10k             
#>  2 $10-20k            count  $10-20k           
#>  3 $20-30k            count  $20-30k           
#>  4 $30-40k            count  $30-40k           
#>  5 $40-50k            count  $40-50k           
#>  6 $50-75k            count  $50-75k           
#>  7 $75-100k           count  $75-100k          
#>  8 $100-150k          count  $100-150k         
#>  9 >150k              count  >150k             
#> 10 Don't know/refused count  Don't know/refused

pivot_longer_spec(relig_income, spec)
#> # A tibble: 180 × 3
#>    religion income             count
#>    <chr>    <chr>              <dbl>
#>  1 Agnostic <$10k                 27
#>  2 Agnostic $10-20k               34
#>  3 Agnostic $20-30k               60
#>  4 Agnostic $30-40k               81
#>  5 Agnostic $40-50k               76
#>  6 Agnostic $50-75k              137
#>  7 Agnostic $75-100k             122
#>  8 Agnostic $100-150k            109
#>  9 Agnostic >150k                 84
#> 10 Agnostic Don't know/refused    96
#> # … with 170 more rows

# Is equivalent to:
relig_income %>% pivot_longer(
  cols = !religion,
  names_to = "income",
  values_to = "count"
)
#> # A tibble: 180 × 3
#>    religion income             count
#>    <chr>    <chr>              <dbl>
#>  1 Agnostic <$10k                 27
#>  2 Agnostic $10-20k               34
#>  3 Agnostic $20-30k               60
#>  4 Agnostic $30-40k               81
#>  5 Agnostic $40-50k               76
#>  6 Agnostic $50-75k              137
#>  7 Agnostic $75-100k             122
#>  8 Agnostic $100-150k            109
#>  9 Agnostic >150k                 84
#> 10 Agnostic Don't know/refused    96
#> # … with 170 more rows
源代碼:R/pivot-long.R

相關用法


注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Pivot data from wide to long using a spec。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。