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


R tidyr pivot_wider_spec 使用规范将数据从长轴转向宽轴


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

用法

pivot_wider_spec(
  data,
  spec,
  ...,
  names_repair = "check_unique",
  id_cols = NULL,
  id_expand = FALSE,
  values_fill = NULL,
  values_fn = NULL,
  unused_fn = NULL,
  error_call = current_env()
)

build_wider_spec(
  data,
  ...,
  names_from = name,
  values_from = value,
  names_prefix = "",
  names_sep = "_",
  names_glue = NULL,
  names_sort = FALSE,
  names_vary = "fastest",
  names_expand = FALSE,
  error_call = current_env()
)

参数

data

要旋转的 DataFrame 。

spec

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

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

...

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

names_repair

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

id_cols

< tidy-select > 唯一标识每个观察值的一组列。默认为 data 中的所有列,spec$.value 中指定的列以及 spec 中未命名为 .name.value 的列除外。通常在有冗余变量(即其值与现有变量完全相关的变量)时使用。

id_expand

在旋转之前,id_cols 列中的值是否应该扩展expand()?这会产生更多行,输出将包含 id_cols 中所有可能值的完整扩展。数据中未表示的隐性因子水平将变得显性。此外,与扩展的id_cols对应的行值将被排序。

values_fill

(可选)一个(标量)值,指定每个 value 在缺失时应填充的内容。

如果您想将不同的填充值应用于不同的值列,这可以是命名列表。

values_fn

(可选)应用于输出中每个单元格中的值的函数。当 id_colsnames_from 列的组合不能唯一标识观测值时,您通常会使用此选项。

如果您想将不同的聚合应用于不同的 values_from 列,这可以是命名列表。

unused_fn

(可选)应用一个函数来汇总未使用列(即未由 id_colsnames_fromvalues_from 标识的列)中的值。

默认情况下会从结果中删除所有未使用的列。

如果您想将不同的聚合应用于不同的未使用列,这可以是命名列表。

必须提供 id_cols 才能使 unused_fn 有用,否则所有未指定的列都将被视为 id_cols

这类似于按 id_cols 进行分组,然后使用 unused_fn 汇总未使用的列。

error_call

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

names_from, values_from

< tidy-select > 一对参数,说明从哪一列(或多列)获取输出列的名称 ( names_from ),以及从哪一列(或多列)获取单元格值 ( values_from )。

如果values_from包含多个值,该值将被添加到输出列的前面。

names_prefix

添加到每个变量名称开头的字符串。如果 names_from 是数值向量并且您想要创建语法变量名称,这尤其有用。

names_sep

如果 names_fromvalues_from 包含多个变量,这将用于将它们的值连接到单个字符串中以用作列名称。

names_glue

您可以提供使用 names_from 列(和特殊的 .value )来创建自定义列名称的粘合规范,而不是 names_sepnames_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 生成的内容相同。

例子

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

us_rent_income
#> # A tibble: 104 × 5
#>    GEOID NAME       variable estimate   moe
#>    <chr> <chr>      <chr>       <dbl> <dbl>
#>  1 01    Alabama    income      24476   136
#>  2 01    Alabama    rent          747     3
#>  3 02    Alaska     income      32940   508
#>  4 02    Alaska     rent         1200    13
#>  5 04    Arizona    income      27517   148
#>  6 04    Arizona    rent          972     4
#>  7 05    Arkansas   income      23789   165
#>  8 05    Arkansas   rent          709     5
#>  9 06    California income      29454   109
#> 10 06    California rent         1358     3
#> # … with 94 more rows
spec1 <- us_rent_income %>%
  build_wider_spec(names_from = variable, values_from = c(estimate, moe))
spec1
#> # A tibble: 4 × 3
#>   .name           .value   variable
#>   <chr>           <chr>    <chr>   
#> 1 estimate_income estimate income  
#> 2 estimate_rent   estimate rent    
#> 3 moe_income      moe      income  
#> 4 moe_rent        moe      rent    

us_rent_income %>%
  pivot_wider_spec(spec1)
#> # A tibble: 52 × 6
#>    GEOID NAME                 estimate_income estimate_r…¹ moe_i…² moe_r…³
#>    <chr> <chr>                          <dbl>        <dbl>   <dbl>   <dbl>
#>  1 01    Alabama                        24476          747     136       3
#>  2 02    Alaska                         32940         1200     508      13
#>  3 04    Arizona                        27517          972     148       4
#>  4 05    Arkansas                       23789          709     165       5
#>  5 06    California                     29454         1358     109       3
#>  6 08    Colorado                       32401         1125     109       5
#>  7 09    Connecticut                    35326         1123     195       5
#>  8 10    Delaware                       31560         1076     247      10
#>  9 11    District of Columbia           43198         1424     681      17
#> 10 12    Florida                        25952         1077      70       3
#> # … with 42 more rows, and abbreviated variable names ¹estimate_rent,
#> #   ²moe_income, ³moe_rent

# Is equivalent to
us_rent_income %>%
  pivot_wider(names_from = variable, values_from = c(estimate, moe))
#> # A tibble: 52 × 6
#>    GEOID NAME                 estimate_income estimate_r…¹ moe_i…² moe_r…³
#>    <chr> <chr>                          <dbl>        <dbl>   <dbl>   <dbl>
#>  1 01    Alabama                        24476          747     136       3
#>  2 02    Alaska                         32940         1200     508      13
#>  3 04    Arizona                        27517          972     148       4
#>  4 05    Arkansas                       23789          709     165       5
#>  5 06    California                     29454         1358     109       3
#>  6 08    Colorado                       32401         1125     109       5
#>  7 09    Connecticut                    35326         1123     195       5
#>  8 10    Delaware                       31560         1076     247      10
#>  9 11    District of Columbia           43198         1424     681      17
#> 10 12    Florida                        25952         1077      70       3
#> # … with 42 more rows, and abbreviated variable names ¹estimate_rent,
#> #   ²moe_income, ³moe_rent

# `pivot_wider_spec()` provides more control over column names and output format
# instead of creating columns with estimate_ and moe_ prefixes,
# keep original variable name for estimates and attach _moe as suffix
spec2 <- tibble(
  .name = c("income", "rent", "income_moe", "rent_moe"),
  .value = c("estimate", "estimate", "moe", "moe"),
  variable = c("income", "rent", "income", "rent")
)

us_rent_income %>%
  pivot_wider_spec(spec2)
#> # A tibble: 52 × 6
#>    GEOID NAME                 income  rent income_moe rent_moe
#>    <chr> <chr>                 <dbl> <dbl>      <dbl>    <dbl>
#>  1 01    Alabama               24476   747        136        3
#>  2 02    Alaska                32940  1200        508       13
#>  3 04    Arizona               27517   972        148        4
#>  4 05    Arkansas              23789   709        165        5
#>  5 06    California            29454  1358        109        3
#>  6 08    Colorado              32401  1125        109        5
#>  7 09    Connecticut           35326  1123        195        5
#>  8 10    Delaware              31560  1076        247       10
#>  9 11    District of Columbia  43198  1424        681       17
#> 10 12    Florida               25952  1077         70        3
#> # … with 42 more rows
源代码:R/pivot-wide.R

相关用法


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