切割和取消切割保留數據幀的寬度,改變其長度。 chop()
通過將每個組中的行轉換為列表列來縮短 df
。 unchop()
通過擴展列表列使 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 tidyr cms_patient_experience 來自醫療保險和醫療補助服務中心的數據
- R tidyr complete 完成缺少數據組合的 DataFrame
- R tidyr separate_rows 將折疊的列分成多行
- R tidyr extract 使用正則表達式組將字符列提取為多列
- R tidyr pivot_longer_spec 使用規範將數據從寬轉為長
- R tidyr unnest_longer 將列表列取消嵌套到行中
- R tidyr uncount “計數” DataFrame
- R tidyr pivot_wider_spec 使用規範將數據從長軸轉向寬軸
- R tidyr replace_na 將 NA 替換為指定值
- R tidyr unnest_wider 將列表列取消嵌套到列中
- R tidyr full_seq 在向量中創建完整的值序列
- R tidyr nest 將行嵌套到 DataFrame 的列表列中
- R tidyr separate 使用正則表達式或數字位置將字符列分成多列
- R tidyr pivot_wider 將數據從長軸轉向寬軸
- R tidyr nest_legacy Nest() 和 unnest() 的舊版本
- R tidyr separate_longer_delim 將字符串拆分為行
- R tidyr gather 將列收集到鍵值對中
- R tidyr hoist 將值提升到列表列之外
- R tidyr pivot_longer 將數據從寬轉為長
- R tidyr pack 打包和拆包
- R tidyr separate_wider_delim 將字符串拆分為列
- R tidyr drop_na 刪除包含缺失值的行
- R tidyr fill 用上一個或下一個值填充缺失值
- R tidyr tidyr_legacy 舊名稱修複
- R tidyr expand 擴展 DataFrame 以包含所有可能的值組合
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Chop and unchop。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。