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


R tidyr pivot_longer_spec 使用规范将数据从宽转为长


这是一个低级数据透视接口,受 cdata 包启发,允许您使用 DataFrame 说明数据透视。

用法

pivot_longer_spec(
  data,
  spec,
  ...,
  cols_vary = "fastest",
  names_repair = "check_unique",
  values_drop_na = FALSE,
  values_ptypes = NULL,
  values_transform = NULL,
  error_call = current_env()
)

build_longer_spec(
  data,
  cols,
  ...,
  names_to = "name",
  values_to = "value",
  names_prefix = NULL,
  names_sep = NULL,
  names_pattern = NULL,
  names_ptypes = NULL,
  names_transform = NULL,
  error_call = current_env()
)

参数

data

要旋转的 DataFrame 。

spec

规范 DataFrame 。这对于更复杂的数据透视非常有用,因为它可以让您更好地控制存储在列名称中的元数据如何转换为结果中的列。

必须是包含字符.name.value 列的 DataFrame 。 spec 中的其他列应命名为与数据集长格式的列匹配,并包含与从宽格式转换的列相对应的值。特殊的 .seq 变量用于在内部消除行的歧义;旋转后它会自动移除。

...

这些点用于将来的扩展,并且必须为空。

cols_vary

当将 cols 转换为更长的格式时,输出行应如何相对于其原始行号排列?

  • "fastest"(默认值)将 cols 中的各个行在输出中保持靠近在一起。当 data 中至少有一个不参与旋转过程的键列时,这通常会产生直观的有序输出。

  • "slowest"cols 中的各个列在输出中紧密结合在一起。当您在旋转过程中使用 data 中的所有列时,这通常会产生直观有序的输出。

names_repair

如果输出具有无效的列名称,会发生什么情况?默认情况下,如果列重复,"check_unique" 将出错。使用 "minimal" 允许输出中存在重复项,或使用 "unique" 通过添加数字后缀来消除重复项。有关更多选项,请参阅vctrs::vec_as_names()

values_drop_na

如果 TRUE ,将删除 value_to 列中仅包含 NA 的行。这有效地将显式缺失值转换为隐式缺失值,通常仅当 data 中的缺失值由其结构创建时才使用。

error_call

当前运行函数的执行环境,例如caller_env() 。该函数将在错误消息中作为错误源被提及。有关详细信息,请参阅 abort()call 参数。

cols

< tidy-select > 要转换为更长格式的列。

names_to

一个字符向量,指定要根据 cols 指定的 data 的列名称中存储的信息创建的新列。

  • 如果长度为 0,或者提供NULL,则不会创建任何列。

  • 如果长度为 1,将创建一个列,其中包含 cols 指定的列名称。

  • 如果长度 >1,将创建多列。在这种情况下,必须提供 names_sepnames_pattern 之一来指定如何拆分列名。您还可以利用两个额外的字符值:

    • NA 将丢弃列名的相应组成部分。

    • ".value" 表示列名称的相应组件定义包含单元格值的输出列的名称,完全覆盖values_to

values_to

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

names_prefix

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

names_sep, names_pattern

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

names_sep 采用与 separate() 相同的规范,并且可以是数字向量(指定要中断的位置),也可以是单个字符串(指定要拆分的正则表达式)。

names_pattern 采用与 extract() 相同的规范,即包含匹配组的正则表达式 (() )。

如果这些参数没有给您足够的控制权,请使用 pivot_longer_spec() 创建规范对象并根据需要手动处理。

names_ptypes, values_ptypes

(可选)列 name-prototype 对的列表。或者,可以提供一个空原型,它将应用于所有列。原型(或简称 ptype)是一个零长度向量(如 integer()numeric() ),它定义向量的类型、类和属性。如果您想确认创建的列是您期望的类型,请使用这些参数。请注意,如果您想更改(而不是确认)特定列的类型,则应使用names_transformvalues_transform 代替。

names_transform, values_transform

(可选)列 name-function 对的列表。或者,可以提供单个函数,该函数将应用于所有列。如果需要更改特定列的类型,请使用这些参数。例如,names_transform = list(week = as.integer) 会将名为 week 的字符变量转换为整数。

如果未指定,names_to 生成的列的类型将为字符,values_to 生成的变量的类型将为用于生成它们的输入列的通用类型。

例子

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

# Use `build_longer_spec()` to build `spec` using similar syntax to `pivot_longer()`
# and run `pivot_longer_spec()` based on `spec`.
spec <- relig_income %>% build_longer_spec(
  cols = !religion,
  names_to = "income",
  values_to = "count"
)
spec
#> # A tibble: 10 × 3
#>    .name              .value income            
#>    <chr>              <chr>  <chr>             
#>  1 <$10k              count  <$10k             
#>  2 $10-20k            count  $10-20k           
#>  3 $20-30k            count  $20-30k           
#>  4 $30-40k            count  $30-40k           
#>  5 $40-50k            count  $40-50k           
#>  6 $50-75k            count  $50-75k           
#>  7 $75-100k           count  $75-100k          
#>  8 $100-150k          count  $100-150k         
#>  9 >150k              count  >150k             
#> 10 Don't know/refused count  Don't know/refused

pivot_longer_spec(relig_income, spec)
#> # A tibble: 180 × 3
#>    religion income             count
#>    <chr>    <chr>              <dbl>
#>  1 Agnostic <$10k                 27
#>  2 Agnostic $10-20k               34
#>  3 Agnostic $20-30k               60
#>  4 Agnostic $30-40k               81
#>  5 Agnostic $40-50k               76
#>  6 Agnostic $50-75k              137
#>  7 Agnostic $75-100k             122
#>  8 Agnostic $100-150k            109
#>  9 Agnostic >150k                 84
#> 10 Agnostic Don't know/refused    96
#> # … with 170 more rows

# Is equivalent to:
relig_income %>% pivot_longer(
  cols = !religion,
  names_to = "income",
  values_to = "count"
)
#> # A tibble: 180 × 3
#>    religion income             count
#>    <chr>    <chr>              <dbl>
#>  1 Agnostic <$10k                 27
#>  2 Agnostic $10-20k               34
#>  3 Agnostic $20-30k               60
#>  4 Agnostic $30-40k               81
#>  5 Agnostic $40-50k               76
#>  6 Agnostic $50-75k              137
#>  7 Agnostic $75-100k             122
#>  8 Agnostic $100-150k            109
#>  9 Agnostic >150k                 84
#> 10 Agnostic Don't know/refused    96
#> # … with 170 more rows
源代码:R/pivot-long.R

相关用法


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