首页 > 解决方案 > 在 r 中一次收集多个列

问题描述

我正在尝试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()它是否是正确的动词。

标签: rtidyr

解决方案


我们可以用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

推荐阅读