【问题标题】:Merge dataframe rows by key column按键列合并数据框行
【发布时间】:2017-02-17 20:31:42
【问题描述】:

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

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

我试过了

【问题讨论】:

  • df %&gt;% group_by(key) %&gt;% summarise(x = toString(x), y = toString(y))?或者只是df %&gt;% group_by(key) %&gt;% summarise_all(toString)

标签: r dplyr


【解决方案1】:

group_bykey 变量然后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()

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

【讨论】:

  • 感谢两位的回答。感谢您展示解决方案的 summarise() 和 summarise_all() 版本。
  • 哦,我在 Python 中需要这个作为 pandas 数据框
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
  • 2012-10-07
  • 2013-04-24
  • 2014-05-02
  • 2018-10-08
  • 2016-07-14
  • 1970-01-01
相关资源
最近更新 更多