使用 `pivot_longer` 将 1x4 table 变成 2x2
Use `pivot_longer` to turn a 1x4 table into a 2x2 one
我有一个 1×4 table,其中包含两个变量的汇总统计信息。例如,
df <- data.frame(
x_min=1,
x_max=2,
y_min=3,
y_max=4)
df
x_min x_max y_min y_max
1 1 2 3 4
我想将其调整为 2×2 格式:
x y
min 1 3
max 2 4
我可以通过以下代码得到结果:
df %>%
pivot_longer(everything(),names_to = 'stat',values_to = 'val') %>%
separate(stat,into = c('var','stat'),sep = '_') %>%
pivot_wider(names_from = var, values_from = val)
但是,我觉得这有点太迂回了,因为它首先将 df
转换为太“长”的 table,然后再将其“加宽”到合适的大小.
有没有办法用pivot_longer()
直接得到最终结果(即不涉及pivot_wider()
)?
你可以这样做:
df <- data.frame(
x_min=1,
x_max=2,
y_min=3,
y_max=4)
tidyr::pivot_longer(df, everything(), names_to = c(".value", "name"), names_sep = "_")
#> # A tibble: 2 × 3
#> name x y
#> <chr> <dbl> <dbl>
#> 1 min 1 3
#> 2 max 2 4
library(tidyverse)
df %>%
pivot_longer(everything(), names_to = c('.value', 'rowname'), names_sep = '_')%>%
column_to_rownames()
x y
min 1 3
max 2 4
我有一个 1×4 table,其中包含两个变量的汇总统计信息。例如,
df <- data.frame(
x_min=1,
x_max=2,
y_min=3,
y_max=4)
df
x_min x_max y_min y_max
1 1 2 3 4
我想将其调整为 2×2 格式:
x y
min 1 3
max 2 4
我可以通过以下代码得到结果:
df %>%
pivot_longer(everything(),names_to = 'stat',values_to = 'val') %>%
separate(stat,into = c('var','stat'),sep = '_') %>%
pivot_wider(names_from = var, values_from = val)
但是,我觉得这有点太迂回了,因为它首先将 df
转换为太“长”的 table,然后再将其“加宽”到合适的大小.
有没有办法用pivot_longer()
直接得到最终结果(即不涉及pivot_wider()
)?
你可以这样做:
df <- data.frame(
x_min=1,
x_max=2,
y_min=3,
y_max=4)
tidyr::pivot_longer(df, everything(), names_to = c(".value", "name"), names_sep = "_")
#> # A tibble: 2 × 3
#> name x y
#> <chr> <dbl> <dbl>
#> 1 min 1 3
#> 2 max 2 4
library(tidyverse)
df %>%
pivot_longer(everything(), names_to = c('.value', 'rowname'), names_sep = '_')%>%
column_to_rownames()
x y
min 1 3
max 2 4