pivot_wider()
"widens"數據,增加列數並減少行數。逆變換為 pivot_longer()
。在vignette("pivot", "tidyr")
中了解更多信息。
請注意,pivot_wider()
不是也不可能是懶惰的,因為我們需要查看數據來確定新的列名是什麽。
用法
# S3 method for tbl_lazy
pivot_wider(
data,
...,
id_cols = NULL,
id_expand = FALSE,
names_from = name,
names_prefix = "",
names_sep = "_",
names_glue = NULL,
names_sort = FALSE,
names_vary = "fastest",
names_expand = FALSE,
names_repair = "check_unique",
values_from = value,
values_fill = NULL,
values_fn = ~max(.x, na.rm = TRUE),
unused_fn = NULL
)
參數
- data
-
由數據庫查詢支持的惰性 DataFrame 。
- ...
-
沒用過;包含在內是為了與通用兼容。
- id_cols
-
唯一標識每個觀察值的一組列。
- id_expand
-
沒用過;包含在內是為了與通用兼容。
- names_from, values_from
-
一對參數,說明從哪一列(或多列)獲取輸出列的名稱 (
names_from
),以及從哪一列(或多列)獲取單元格值 (values_from
)。如果
values_from
包含多個值,該值將被添加到輸出列的前麵。 - names_prefix
-
添加到每個變量名稱開頭的字符串。
- names_sep
-
如果
names_from
或values_from
包含多個變量,這將用於將它們的值連接到單個字符串中以用作列名稱。 - names_glue
-
您可以提供使用
names_from
列(和特殊的.value
)來創建自定義列名稱的粘合規範,而不是names_sep
和names_prefix
。 - names_sort
-
列名應該排序嗎?如果是
FALSE
(默認值),則列名稱按首次出現排序。 - names_vary
-
當
names_from
標識具有多個唯一值的列(或多列),並且提供了多個values_from
列時,應按什麽順序組合結果列名稱?-
"fastest"
以最快的速度改變names_from
值,從而產生以下形式的列命名方案:value1_name1, value1_name2, value2_name1, value2_name2
。這是默認設置。 -
"slowest"
以最慢的速度改變names_from
值,從而產生以下形式的列命名方案:value1_name1, value2_name1, value1_name2, value2_name2
。
-
- names_expand
-
在旋轉之前,
names_from
列中的值是否應該擴展expand()
?這會產生更多列,輸出將包含與names_from
中所有可能值的完整擴展相對應的列名稱。此外,列名將被排序,與names_sort
生成的內容相同。 - names_repair
-
如果輸出具有無效的列名稱,會發生什麽情況?
- values_fill
-
(可選)一個(標量)值,指定每個
value
在缺失時應填充的內容。 - values_fn
-
一個函數,默認為
max()
,應用於輸出中每個單元格中的value
。與本地數據幀相反,它不能是NULL
。 - unused_fn
-
(可選)應用一個函數來匯總未使用列(即未由
id_cols
、names_from
或values_from
標識的列)中的值。默認情況下會從結果中刪除所有未使用的列。
如果您想將不同的聚合應用於不同的未使用列,這可以是命名列表。
必須提供
id_cols
才能使unused_fn
有用,否則所有未指定的列都將被視為id_cols
。這類似於按
id_cols
進行分組,然後使用unused_fn
匯總未使用的列。
細節
本地數據幀與 pivot_wider()
的最大區別在於 values_fn
不能是 NULL
。默認情況下,如果 id_cols
和 value
列的組合唯一標識一個觀察值,則 max()
會產生與本地數據幀相同的結果。請注意,如果觀察結果未唯一標識,您也不會收到警告。
SQL 代碼的翻譯本質上如下:
-
獲取
names_from
列中的唯一鍵。 -
對於每個鍵值生成以下形式的表達式:
value_fn( CASE WHEN (`names from column` == `key value`) THEN (`value column`) END ) AS `output column`
-
按 id 列對數據進行分組。
-
使用步驟 2 中的表達式匯總分組數據。
相關用法
- R dbplyr pivot_longer.tbl_lazy 將數據從寬轉為長
- R dbplyr partial_eval 部分評估表達式。
- R dbplyr pull.tbl_sql 提取單列
- R dbplyr backend-teradata 後端:Teradata
- R dbplyr escape 轉義/引用字符串。
- R dbplyr expand.tbl_lazy 擴展 SQL 表以包含所有可能的值組合
- R dbplyr distinct.tbl_lazy 子集不同/唯一行
- R dbplyr backend-sqlite 後端:SQLite
- R dbplyr build_sql 構建 SQL 字符串。
- R dbplyr mutate.tbl_lazy 創建、修改和刪除列
- R dbplyr collapse.tbl_sql 計算查詢的結果
- R dbplyr sql_expr 從 R 表達式生成 SQL
- R dbplyr get_returned_rows 提取並檢查返回的行
- R dbplyr dbplyr_uncount “計數”數據庫表
- R dbplyr count.tbl_lazy 按組計數觀察值
- R dbplyr backend-odbc 後端:ODBC
- R dbplyr head.tbl_lazy 對第一行進行子集化
- R dbplyr db-quote SQL 轉義/引用泛型
- R dbplyr copy_inline 在 dbplyr 查詢中使用本地 DataFrame
- R dbplyr backend-oracle 後端:甲骨文
- R dbplyr backend-snowflake 後端:雪花
- R dbplyr lahman 緩存並檢索 Lahman 棒球數據庫的 src_sqlite。
- R dbplyr backend-redshift 後端:紅移
- R dbplyr group_by.tbl_lazy 按一個或多個變量分組
- R dbplyr tbl_lazy 創建本地惰性 tibble
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Pivot data from long to wide。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。