按键列合并数据帧行

时间:2017-02-17 20:31:42

标签: r dplyr

我有一个从关系数据库导出的大型数据帧。我想基于主键列返回唯一行,同时组合来自所有其他行的观察。我试图使用gather()来做到这一点但到目前为止没有运气。以下是原始数据框的简化示例:

library(dplyr)
key <- c(rep(seq(1:3), 2))
x <- c("a", "b", "c", "d", "e", "f")
y <- rep(c("foo", "bar"), 3)

df <- data_frame(key, x, y)


df

    key     x     y
   <int> <chr> <chr>
1     1     a   foo
2     2     b   bar
3     3     c   foo
4     1     d   bar
5     2     e   foo
6     3     f   bar

我想要返回的数据框:

df

    key     x       y
   <int> <chr>   <chr>
1     1     a, d   foo, bar
2     2     b, e   bar, foo
3     3     c, f   foo, bar

我试过

1 个答案:

答案 0 :(得分:0)

group_by key变量,然后summarise其他变量为lists。调用data.frame而不是data_frame将以您指定的格式返回数据,而不是列表列。

library(dplyr)

df %>% 
  group_by(key) %>% 
  summarise(x = list(x), 
            y = list(y)) %>% 
  data.frame()

  key    x        y
   1    a, d    foo, bar
   2    b, e    bar, foo
   3    c, f    foo, bar

df %>% 
 group_by(key) %>% 
 summarise_all(list) %>% 
 data.frame()

在没有指定列名的情况下做同样的事情。