当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R dbplyr pivot_longer.tbl_lazy 将数据从宽转为长


pivot_longer() "lengthens"数据,增加行数并减少列数。逆变换为`tidyr::pivot_wider()]

vignette("pivot", "tidyr") 中了解更多信息。

虽然大多数函数相同,但与本地数据帧上的 pivot_longer() 存在一些差异:

  • 输出的排序不同/不明确,

  • 混合列类型的强制留给数据库,

  • values_ptypes 不支持。

请注意,build_longer_spec()pivot_longer_spec() 不适用于远程表。

用法

# S3 method for tbl_lazy
pivot_longer(
  data,
  cols,
  ...,
  cols_vary,
  names_to = "name",
  names_prefix = NULL,
  names_sep = NULL,
  names_pattern = NULL,
  names_ptypes = NULL,
  names_transform = NULL,
  names_repair = "check_unique",
  values_to = "value",
  values_drop_na = FALSE,
  values_ptypes,
  values_transform = NULL
)

参数

data

要旋转的 DataFrame 。

cols

列转向更长的格式。

...

传递给方法的附加参数。

cols_vary

不支持;包含在内是为了与通用兼容。

names_to

一个字符串,指定要根据 data 的列名称中存储的数据创建的列的名称。

names_prefix

用于从每个变量名称开头删除匹配文本的正则表达式。

names_sep, names_pattern

如果 names_to 包含多个值,这些参数控制列名的分解方式。

names_ptypes

name-prototype 列对的列表。

names_transform, values_transform

name-function 列对的列表。

names_repair

如果输出具有无效的列名称,会发生什么情况?

values_to

一个字符串,指定要根据单元格值中存储的数据创建的列的名称。如果names_to是包含特殊.value标记的字符,则该值将被忽略,并且值列的名称将从部分现有列名称派生。

values_drop_na

如果 TRUE ,将删除 value_to 列中仅包含 NA 的行。

values_ptypes

不支持。

细节

SQL 翻译的基本工作原理如下:

  1. 按其关键列(即通过塞入列名称中的变量)拆分规范。

  2. 对于拆分规范中的每个部分 transmute() data 分为以下列

  • id 列,即未旋转的列

  • 关键列

  • 值列,即旋转的列

  1. 将所有部分与 union_all() 结合起来

例子

# See vignette("pivot") for examples and explanation

# Simplest case where column names are character data
memdb_frame(
  id = c("a", "b"),
  x = 1:2,
  y = 3:4
) %>%
  tidyr::pivot_longer(-id)
#> # Source:   SQL [4 x 3]
#> # Database: sqlite 3.41.2 [:memory:]
#>   id    name  value
#>   <chr> <chr> <int>
#> 1 a     x         1
#> 2 b     x         2
#> 3 a     y         3
#> 4 b     y         4

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Pivot data from wide to long。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。