保留 `tidyr::pivot_wider()` 输出中的所有列

Retaining all columns in `tidyr::pivot_wider()` output

我正在尝试使用 tidyr::pivot_wider() 将长格式数据转换为宽格式数据,但 运行 出现问题。

数据

假设这是我的示例数据集

library(dplyr)
library(tidyr)

(dataEx <- structure(
  list(
    random1 = c(10, 10, 10, 10, 10, 10),
    random2 = c(1, 1, 2, 2, 3, 3),
    .rowid = c(1L, 1L, 2L, 2L, 3L, 3L),
    Variable = c("x", "y", "x", "y", "x", "y"),
    Dimension = c("Time", "Fraction", "Time", "Fraction", "Time", "Fraction"),
    Unit = c("s", "%", "s", "%", "s", "%"),
    Values = c(900, 25, 1800, 45, 3600, 78)
  ),
  row.names = c(NA, -6L),
  class = c("tbl_df", "tbl", "data.frame")
))
#> # A tibble: 6 x 7
#>   random1 random2 .rowid Variable Dimension Unit  Values
#>     <dbl>   <dbl>  <int> <chr>    <chr>     <chr>  <dbl>
#> 1      10       1      1 x        Time      s        900
#> 2      10       1      1 y        Fraction  %         25
#> 3      10       2      2 x        Time      s       1800
#> 4      10       2      2 y        Fraction  %         45
#> 5      10       3      3 x        Time      s       3600
#> 6      10       3      3 y        Fraction  %         78

实际产量

这是我目前必须将其转向更宽格式的内容。而且,尽管它有效,但请注意它会删除两列:random1random2.

dataEx %>%
  tidyr::pivot_wider(
    id_cols = .rowid,
    names_from = Variable,
    values_from = dplyr::matches("Values|Unit|Dimension"),
    names_glue = "{Variable}{.value}"
  )
#> # A tibble: 3 x 7
#>   .rowid xDimension yDimension xUnit yUnit xValues yValues
#>    <int> <chr>      <chr>      <chr> <chr>   <dbl>   <dbl>
#> 1      1 Time       Fraction   s     %         900      25
#> 2      2 Time       Fraction   s     %        1800      45
#> 3      3 Time       Fraction   s     %        3600      78

预期输出

如何避免这种情况发生,以便获得以下(预期)输出?

#> # A tibble: 3 x 9
#>   .rowid xDimension yDimension xUnit yUnit xValues yValues random1 random2
#>    <int> <chr>      <chr>      <chr> <chr>   <dbl>   <dbl>   <dbl>   <dbl>
#> 1      1 Time       Fraction   s     %         900      25      10       1
#> 2      2 Time       Fraction   s     %        1800      45      10       2
#> 3      3 Time       Fraction   s     %        3600      78      10       3

id_cols 参数添加更多列名称:

id_cols = c(.rowid, random1, random2)