Преемником gather
является pivot_longer
, который делает именно то, что вы хотите:
library(tidyr)
library(dplyr)
data <- tibble(State = c("A", "B"),
NumTotal = c(352, 331),
Num1 = c(98,233),
Num2 = c(10, 42),
Num3 = c(174, 30),
num4 = c(70, 26))
data %>%
select(-NumTotal) %>%
pivot_longer(starts_with("Num"))
#> # A tibble: 8 x 3
#> State name value
#> <chr> <chr> <dbl>
#> 1 A Num1 98
#> 2 A Num2 10
#> 3 A Num3 174
#> 4 A num4 70
#> 5 B Num1 233
#> 6 B Num2 42
#> 7 B Num3 30
#> 8 B num4 26
Сначала я снимаю выделение со столбца NumTotal
, так как вы его не используете, затем переворачиваю таблицу в длинный формат, сопоставив префикс имени столбца, который вы хотите повернуть. Чтобы одновременно получить нужные имена выходных столбцов, вызовите pivot_longer
следующим образом:
data %>%
select(-NumTotal) %>%
pivot_longer(starts_with("Num"), names_to = "NumClass", values_to = "NumTotal")
#> # A tibble: 8 x 3
#> State NumClass NumTotal
#> <chr> <chr> <dbl>
#> 1 A Num1 98
#> 2 A Num2 10
#> 3 A Num3 174
#> 4 A num4 70
#> 5 B Num1 233
#> 6 B Num2 42
#> 7 B Num3 30
#> 8 B num4 26