使用 `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