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