打包和解包保留數據幀的長度,改變其寬度。 pack()
通過將一組列折疊成單個 df-column 來縮小 df
的範圍。 unpack()
通過將 df-columns 擴展回各個列,使 data
變得更寬。
用法
pack(.data, ..., .names_sep = NULL, .error_call = current_env())
unpack(
data,
cols,
...,
names_sep = NULL,
names_repair = "check_unique",
error_call = current_env()
)
參數
- ...
-
對於
pack()
,要打包的 <tidy-select
> 列,使用new_col = c(col1, col2, col3)
形式的 name-variable 對指定。右側可以是任何有效的整齊選擇表達式。對於
unpack()
,這些點用於將來的擴展,並且必須為空。 - data, .data
-
一個 DataFrame 。
- cols
-
<
tidy-select
> 要解壓的列。 - names_sep, .names_sep
-
如果是
NULL
(默認值),名稱將保持原樣。在pack()
中,內部名稱將來自以前的外部名稱;在unpack()
中,新的外部名稱將來自內部名稱。如果是字符串,則內部名稱和外部名稱將一起使用。在
unpack()
中,新外部列的名稱將通過將外部列名稱和內部列名稱粘貼在一起形成,並用names_sep
分隔。在pack()
中,新的內部名稱將自動刪除外部名稱 +names_sep
。這使得names_sep
在打包和解包之間大致對稱。 - names_repair
-
用於檢查輸出數據幀是否具有有效名稱。必須是以下選項之一:
-
"minimal
“:沒有名稱修複或檢查,超出基本存在, -
"unique
“:確保名稱唯一且不為空, -
"check_unique
":(默認),不進行名稱修複,但檢查它們是否唯一, -
"universal
“:使名稱具有唯一性和語法性 -
函數:應用自定義名稱修複。
-
tidyr_legacy :使用 tidyr 0.8 中的名稱 Repair。
-
公式:purrr-style 匿名函數(參見
rlang::as_function()
)
有關這些術語以及用於執行它們的策略的更多詳細信息,請參閱
vctrs::vec_as_names()
。 -
- error_call, .error_call
-
當前運行函數的執行環境,例如
caller_env()
。該函數將在錯誤消息中作為錯誤源被提及。有關詳細信息,請參閱abort()
的call
參數。
細節
一般來說,解包比打包更有用,因為它簡化了複雜的數據結構。目前,很少有函數可以與 df-cols 一起使用,它們大多是出於好奇,但似乎值得進一步探索,因為它們模仿了 Excel 中非常流行的嵌套列標題。
例子
# Packing -------------------------------------------------------------------
# It's not currently clear why you would ever want to pack columns
# since few functions work with this sort of data.
df <- tibble(x1 = 1:3, x2 = 4:6, x3 = 7:9, y = 1:3)
df
#> # A tibble: 3 × 4
#> x1 x2 x3 y
#> <int> <int> <int> <int>
#> 1 1 4 7 1
#> 2 2 5 8 2
#> 3 3 6 9 3
df %>% pack(x = starts_with("x"))
#> # A tibble: 3 × 2
#> y x$x1 $x2 $x3
#> <int> <int> <int> <int>
#> 1 1 1 4 7
#> 2 2 2 5 8
#> 3 3 3 6 9
df %>% pack(x = c(x1, x2, x3), y = y)
#> # A tibble: 3 × 2
#> x$x1 $x2 $x3 y$y
#> <int> <int> <int> <int>
#> 1 1 4 7 1
#> 2 2 5 8 2
#> 3 3 6 9 3
# .names_sep allows you to strip off common prefixes; this
# acts as a natural inverse to name_sep in unpack()
iris %>%
as_tibble() %>%
pack(
Sepal = starts_with("Sepal"),
Petal = starts_with("Petal"),
.names_sep = "."
)
#> # A tibble: 150 × 3
#> Species Sepal$Length $Width Petal$Length $Width
#> <fct> <dbl> <dbl> <dbl> <dbl>
#> 1 setosa 5.1 3.5 1.4 0.2
#> 2 setosa 4.9 3 1.4 0.2
#> 3 setosa 4.7 3.2 1.3 0.2
#> 4 setosa 4.6 3.1 1.5 0.2
#> 5 setosa 5 3.6 1.4 0.2
#> 6 setosa 5.4 3.9 1.7 0.4
#> 7 setosa 4.6 3.4 1.4 0.3
#> 8 setosa 5 3.4 1.5 0.2
#> 9 setosa 4.4 2.9 1.4 0.2
#> 10 setosa 4.9 3.1 1.5 0.1
#> # … with 140 more rows
# Unpacking -----------------------------------------------------------------
df <- tibble(
x = 1:3,
y = tibble(a = 1:3, b = 3:1),
z = tibble(X = c("a", "b", "c"), Y = runif(3), Z = c(TRUE, FALSE, NA))
)
df
#> # A tibble: 3 × 3
#> x y$a $b z$X $Y $Z
#> <int> <int> <int> <chr> <dbl> <lgl>
#> 1 1 1 3 a 0.280 TRUE
#> 2 2 2 2 b 0.105 FALSE
#> 3 3 3 1 c 0.746 NA
df %>% unpack(y)
#> # A tibble: 3 × 4
#> x a b z$X $Y $Z
#> <int> <int> <int> <chr> <dbl> <lgl>
#> 1 1 1 3 a 0.280 TRUE
#> 2 2 2 2 b 0.105 FALSE
#> 3 3 3 1 c 0.746 NA
df %>% unpack(c(y, z))
#> # A tibble: 3 × 6
#> x a b X Y Z
#> <int> <int> <int> <chr> <dbl> <lgl>
#> 1 1 1 3 a 0.280 TRUE
#> 2 2 2 2 b 0.105 FALSE
#> 3 3 3 1 c 0.746 NA
df %>% unpack(c(y, z), names_sep = "_")
#> # A tibble: 3 × 6
#> x y_a y_b z_X z_Y z_Z
#> <int> <int> <int> <chr> <dbl> <lgl>
#> 1 1 1 3 a 0.280 TRUE
#> 2 2 2 2 b 0.105 FALSE
#> 3 3 3 1 c 0.746 NA
相關用法
- R tidyr pivot_longer_spec 使用規範將數據從寬轉為長
- R tidyr pivot_wider_spec 使用規範將數據從長軸轉向寬軸
- R tidyr pivot_wider 將數據從長軸轉向寬軸
- R tidyr pivot_longer 將數據從寬轉為長
- R tidyr separate_rows 將折疊的列分成多行
- R tidyr extract 使用正則表達式組將字符列提取為多列
- R tidyr chop 砍伐和砍伐
- R tidyr unnest_longer 將列表列取消嵌套到行中
- R tidyr uncount “計數” DataFrame
- R tidyr cms_patient_experience 來自醫療保險和醫療補助服務中心的數據
- R tidyr replace_na 將 NA 替換為指定值
- R tidyr unnest_wider 將列表列取消嵌套到列中
- R tidyr full_seq 在向量中創建完整的值序列
- R tidyr nest 將行嵌套到 DataFrame 的列表列中
- R tidyr separate 使用正則表達式或數字位置將字符列分成多列
- R tidyr nest_legacy Nest() 和 unnest() 的舊版本
- R tidyr separate_longer_delim 將字符串拆分為行
- R tidyr gather 將列收集到鍵值對中
- R tidyr hoist 將值提升到列表列之外
- R tidyr separate_wider_delim 將字符串拆分為列
- R tidyr drop_na 刪除包含缺失值的行
- R tidyr fill 用上一個或下一個值填充缺失值
- R tidyr tidyr_legacy 舊名稱修複
- R tidyr complete 完成缺少數據組合的 DataFrame
- R tidyr expand 擴展 DataFrame 以包含所有可能的值組合
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Pack and unpack。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。