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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
