在 tidyverse 中重塑 table,pivot_wider 的问题
Reshape table in tidyverse, problems with pivot_wider
我有一个 table 看起来像:
library(tidyverse)
df_initial <- tibble::tribble(
~year_month, ~n_unique, ~new_n, ~old_n,
"2021-01", 168, 159, 9,
"2021-02", 249, 244, 5,
"2021-03", 197, 186, 11
)
又名:
# A tibble: 3 × 4
year_month n_unique new_n old_n
<chr> <dbl> <dbl> <dbl>
1 2021-01 168 159 9
2 2021-02 249 244 5
3 2021-03 197 186 11
我想重塑列和行。
我尝试通过 pivot_wider 但我没有任何运气 - 特别是因为它没有找到正确的角色视图。
df_reshaped <- tibble::tribble(
~year_month, ~`2021-01`, ~`2021-02`, ~`2021-03`,
"n_unique", 168, 249, 197,
"new_n", 159, 244, 186,
"old_n", 9, 5, 11
)
最后看起来像这样:
# A tibble: 3 × 4
year_month `2021-01` `2021-02` `2021-03`
<chr> <dbl> <dbl> <dbl>
1 n_unique 168 249 197
2 new_n 159 244 186
3 old_n 9 5 11
我对如何使用该功能感到很困惑,如果您能提供帮助,我们将不胜感激!
交换行和列可以用转置函数存档:
t(df_initial)
这或多或少等同于通过交换列再次将所有内容旋转得更长和更宽:
df_initial %>%
mutate(across(everything(), as.character)) %>%
pivot_longer(-year_month) %>%
pivot_wider(names_from = year_month, values_from = value) %>%
type_convert()
# A tibble: 3 × 4
name `2021-01` `2021-02` `2021-03`
<chr> <dbl> <dbl> <dbl>
1 n_unique 168 249 197
2 new_n 159 244 186
3 old_n 9 5 11
您可以使用一些 tibble
函数:
df_initial %>%
column_to_rownames("year_month") %>%
t() %>%
as_tibble(rownames = "year_month")
# # A tibble: 3 x 4
# year_month `2021-01` `2021-02` `2021-03`
# <chr> <dbl> <dbl> <dbl>
# 1 n_unique 168 249 197
# 2 new_n 159 244 186
# 3 old_n 9 5 11
它的base
相当于:
setNames(data.frame(t(df_initial[-1])), df_initial[[1]])
我有一个 table 看起来像:
library(tidyverse)
df_initial <- tibble::tribble(
~year_month, ~n_unique, ~new_n, ~old_n,
"2021-01", 168, 159, 9,
"2021-02", 249, 244, 5,
"2021-03", 197, 186, 11
)
又名:
# A tibble: 3 × 4
year_month n_unique new_n old_n
<chr> <dbl> <dbl> <dbl>
1 2021-01 168 159 9
2 2021-02 249 244 5
3 2021-03 197 186 11
我想重塑列和行。 我尝试通过 pivot_wider 但我没有任何运气 - 特别是因为它没有找到正确的角色视图。
df_reshaped <- tibble::tribble(
~year_month, ~`2021-01`, ~`2021-02`, ~`2021-03`,
"n_unique", 168, 249, 197,
"new_n", 159, 244, 186,
"old_n", 9, 5, 11
)
最后看起来像这样:
# A tibble: 3 × 4
year_month `2021-01` `2021-02` `2021-03`
<chr> <dbl> <dbl> <dbl>
1 n_unique 168 249 197
2 new_n 159 244 186
3 old_n 9 5 11
我对如何使用该功能感到很困惑,如果您能提供帮助,我们将不胜感激!
交换行和列可以用转置函数存档:
t(df_initial)
这或多或少等同于通过交换列再次将所有内容旋转得更长和更宽:
df_initial %>%
mutate(across(everything(), as.character)) %>%
pivot_longer(-year_month) %>%
pivot_wider(names_from = year_month, values_from = value) %>%
type_convert()
# A tibble: 3 × 4
name `2021-01` `2021-02` `2021-03`
<chr> <dbl> <dbl> <dbl>
1 n_unique 168 249 197
2 new_n 159 244 186
3 old_n 9 5 11
您可以使用一些 tibble
函数:
df_initial %>%
column_to_rownames("year_month") %>%
t() %>%
as_tibble(rownames = "year_month")
# # A tibble: 3 x 4
# year_month `2021-01` `2021-02` `2021-03`
# <chr> <dbl> <dbl> <dbl>
# 1 n_unique 168 249 197
# 2 new_n 159 244 186
# 3 old_n 9 5 11
它的base
相当于:
setNames(data.frame(t(df_initial[-1])), df_initial[[1]])