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


R tidyr chop 砍伐和砍伐


切割和取消切割保留數據幀的寬度,改變其長度。 chop() 通過將每個組中的行轉換為列表列來縮短 dfunchop() 通過擴展列表列使 df 更長,以便列表列的每個元素在輸出中獲得自己的行。 chop()unchop() 是更複雜函數的構建塊(例如 unnest()unnest_longer()unnest_wider() ),通常比交互式數據分析更適合編程。

用法

chop(data, cols, ..., error_call = current_env())

unchop(
  data,
  cols,
  ...,
  keep_empty = FALSE,
  ptype = NULL,
  error_call = current_env()
)

參數

data

一個 DataFrame 。

cols

< tidy-select > 要砍伐或取消砍伐的列。

對於 unchop() ,每列應該是包含廣義向量的列表列(例如 NULL、原子向量、S3 向量、列表或數據幀的任意組合)。

...

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

error_call

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

keep_empty

默認情況下,對於要取消切割/取消嵌套的列表中的每個元素,您都會獲得一行輸出。這意味著如果存在大小為 0 的元素(例如 NULL 或空 DataFrame 或向量),則整行將從輸出中刪除。如果要保留所有行,請使用 keep_empty = TRUE 將 size-0 元素替換為單行缺失值。

ptype

(可選)列 name-prototype 的命名列表對強製 cols,覆蓋通過組合各個值猜測的默認值。或者,可以提供單個空 ptype,它將應用於所有 cols

細節

一般來說,unchopping 比 chopping 更有用,因為它簡化了複雜的數據結構,並且 nest() ing 通常比 chop() ing 更合適,因為它可以更好地保留觀察值之間的連接。

chop() 創建類 vctrs::list_of() 的列表列,以確保在清空切碎的數據幀時保持一致的行為。例如,這有助於在往返切碎和取消切碎之後恢複原始列類型。由於 <list_of> 會跟蹤其元素的類型,因此 unchop() 甚至能夠為空列表列重建正確的向量類型。

例子

# Chop ----------------------------------------------------------------------
df <- tibble(x = c(1, 1, 1, 2, 2, 3), y = 1:6, z = 6:1)
# Note that we get one row of output for each unique combination of
# non-chopped variables
df %>% chop(c(y, z))
#> # A tibble: 3 × 3
#>       x           y           z
#>   <dbl> <list<int>> <list<int>>
#> 1     1         [3]         [3]
#> 2     2         [2]         [2]
#> 3     3         [1]         [1]
# cf nest
df %>% nest(data = c(y, z))
#> # A tibble: 3 × 2
#>       x data            
#>   <dbl> <list>          
#> 1     1 <tibble [3 × 2]>
#> 2     2 <tibble [2 × 2]>
#> 3     3 <tibble [1 × 2]>

# Unchop --------------------------------------------------------------------
df <- tibble(x = 1:4, y = list(integer(), 1L, 1:2, 1:3))
df %>% unchop(y)
#> # A tibble: 6 × 2
#>       x     y
#>   <int> <int>
#> 1     2     1
#> 2     3     1
#> 3     3     2
#> 4     4     1
#> 5     4     2
#> 6     4     3
df %>% unchop(y, keep_empty = TRUE)
#> # A tibble: 7 × 2
#>       x     y
#>   <int> <int>
#> 1     1    NA
#> 2     2     1
#> 3     3     1
#> 4     3     2
#> 5     4     1
#> 6     4     2
#> 7     4     3

# unchop will error if the types are not compatible:
df <- tibble(x = 1:2, y = list("1", 1:3))
try(df %>% unchop(y))
#> Error in list_unchop(col, ptype = col_ptype) : 
#>   Can't combine `x[[1]]` <character> and `x[[2]]` <integer>.

# Unchopping a list-col of data frames must generate a df-col because
# unchop leaves the column names unchanged
df <- tibble(x = 1:3, y = list(NULL, tibble(x = 1), tibble(y = 1:2)))
df %>% unchop(y)
#> # A tibble: 3 × 2
#>       x   y$x    $y
#>   <int> <dbl> <int>
#> 1     2     1    NA
#> 2     3    NA     1
#> 3     3    NA     2
df %>% unchop(y, keep_empty = TRUE)
#> # A tibble: 4 × 2
#>       x   y$x    $y
#>   <int> <dbl> <int>
#> 1     1    NA    NA
#> 2     2     1    NA
#> 3     3    NA     1
#> 4     3    NA     2
源代碼:R/chop.R

相關用法


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