直接转向,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
下面是一些示例数据:
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