直接转向,pivot_wider 给出意想不到的结果

Straight forward pivot, pivot_wider giving unexpexted results

下面是一些示例数据:

    exdata <- structure(list(date = structure(c(18780, 18784, 18785, 18786, 
18787, 18789, 18779, 18781, 18782, 18783, 18788, 18790, 18791, 
18792, 18793, 18794, 18795), class = "Date"), foo = c(1L, 1L, 
3L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
    bar = c(2986L, 2443L, 3601L, 3184L, 3164L, 3230L, 3343L, 
    3313L, 2631L, 2054L, 3386L, 2686L, 3127L, 4072L, 4057L, 3723L, 
    3912L), blah = c(21L, 36L, 44L, 32L, 28L, 13L, 31L, 12L, 
    27L, 24L, 22L, 23L, 25L, 17L, 24L, 24L, 18L)), row.names = c(NA, 
-17L), class = c("tbl_df", "tbl", "data.frame"))

看起来像这样:

exdata
# A tibble: 17 x 4
   date         foo   bar  blah
   <date>     <int> <int> <int>
 1 2021-06-02     1  2986    21
 2 2021-06-06     1  2443    36
 3 2021-06-07     3  3601    44
 4 2021-06-08     1  3184    32
 5 2021-06-09     1  3164    28
 6 2021-06-11     1  3230    13
 7 2021-06-01     0  3343    31
 8 2021-06-03     0  3313    12
 9 2021-06-04     0  2631    27
10 2021-06-05     0  2054    24
11 2021-06-10     0  3386    22
12 2021-06-12     0  2686    23
13 2021-06-13     0  3127    25
14 2021-06-14     0  4072    17
15 2021-06-15     0  4057    24
16 2021-06-16     0  3723    24
17 2021-06-17     0  3912    18

我想旋转,我的日期 运行 横跨顶部,然后是下面的 3 行,foo、bar 和 bla 各占一行。

尝试过:

exdata %>% pivot_wider(names_from = date, values_from = foo:bar)

给出了:

# A tibble: 15 x 35
    blah `foo_2021-06-02` `foo_2021-06-06` `foo_2021-06-07` `foo_2021-06-08` `foo_2021-06-09`
   <int>            <int>            <int>            <int>            <int>            <int>
 1    21                1               NA               NA               NA               NA
 2    36               NA                1               NA               NA               NA
 3    44               NA               NA                3               NA               NA
 4    32               NA               NA               NA                1               NA
 5    28               NA               NA               NA               NA                1
 6    13               NA               NA               NA               NA               NA
 7    31               NA               NA               NA               NA               NA
 8    12               NA               NA               NA               NA               NA
 9    27               NA               NA               NA               NA               NA
10    24               NA               NA               NA               NA               NA
11    22               NA               NA               NA               NA               NA
12    23               NA               NA               NA               NA               NA
13    25               NA               NA               NA               NA               NA
14    17               NA               NA               NA               NA               NA
15    18               NA               NA               NA               NA               NA
# … with 29 more variables: `foo_2021-06-11` <int>, `foo_2021-06-01` <int>, `foo_2021-06-03` <int>,
#   `foo_2021-06-04` <int>, `foo_2021-06-05` <int>, `foo_2021-06-10` <int>, `foo_2021-06-12` <int>,
#   `foo_2021-06-13` <int>, `foo_2021-06-14` <int>, `foo_2021-06-15` <int>, `foo_2021-06-16` <int>,
#   `foo_2021-06-17` <int>, `bar_2021-06-02` <int>, `bar_2021-06-06` <int>, `bar_2021-06-07` <int>,
#   `bar_2021-06-08` <int>, `bar_2021-06-09` <int>, `bar_2021-06-11` <int>, `bar_2021-06-01` <int>,
#   `bar_2021-06-03` <int>, `bar_2021-06-04` <int>, `bar_2021-06-05` <int>, `bar_2021-06-10` <int>,
#   `bar_2021-06-12` <int>, `bar_2021-06-13` <int>, `bar_2021-06-14` <int>, `bar_2021-06-15` <int>,
#   `bar_2021-06-16` <int>, `bar_2021-06-17` <int>

也许 pivot_wider() 对我这里的需求有点矫枉过正,我 'feel' 想我需要一个更简单的操作。

我如何转置 exdata 以便我在顶部有日期作为列,然后每个指标都有一行?

不是真正的 tidy 解决方案,但您想要的数据也不整洁(至少在本例中):

library(tidyverse)
exdata %>%
    column_to_rownames("date") %>%
    t() %>%
    as.data.frame()
#>      2021-06-02 2021-06-06 2021-06-07 2021-06-08 2021-06-09 2021-06-11
#> foo           1          1          3          1          1          1
#> bar        2986       2443       3601       3184       3164       3230
#> blah         21         36         44         32         28         13
#>      2021-06-01 2021-06-03 2021-06-04 2021-06-05 2021-06-10 2021-06-12
#> foo           0          0          0          0          0          0
#> bar        3343       3313       2631       2054       3386       2686
#> blah         31         12         27         24         22         23
#>      2021-06-13 2021-06-14 2021-06-15 2021-06-16 2021-06-17
#> foo           0          0          0          0          0
#> bar        3127       4072       4057       3723       3912
#> blah         25         17         24         24         18