Собрать сразу несколько столбцов в r - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь gather() data.frame, но почему-то он не выполняет то, что я хочу. Это мои данные:

df <- data.frame("id" = c(1),
                 "reco_1"= c(2),
                 "sim_1" = c(2),
                 "title_1"= c(2),
                 "reco_2" = c(3),
                 "sim_2" = c(3),
                 "title_2"= c(3))

И вот как это выглядит напечатанным:

> df
  id reco_1 sim_1 title_1 reco_2 sim_2 title_2
1  1      2     2       2      3     3       3

Когда я сейчас gather() мой df, это выглядит так:

> df %>% gather(reco, sim, -id)
  id    reco sim
1  1  reco_1   2
2  1   sim_1   2
3  1 title_1   2
4  1  reco_2   3
5  1   sim_2   3
6  1 title_2   3

Однако я бы хотел иметь следующую структуру:

  id  reco  sim  title
1  1  2     2    2
2  2  3     3    3

Я был бы признателен за любую помощь, так как я даже не знаю, подходит ли gather() глагол для этого.

1 Ответ

3 голосов
/ 18 июня 2020

Мы можем использовать pivot_longer

library(dplyr)
library(tidyr)
df %>% 
  pivot_longer(-id, names_to = c(".value", "new_id"), names_sep = "_") %>% 
  select(-id)

# A tibble: 2 x 4
  new_id  reco   sim title
  <chr>  <dbl> <dbl> <dbl>
1 1          2     2     2
2 2          3     3     3
...