【问题标题】:Sort and concatenate values by group [duplicate]按组对值进行排序和连接[重复]
【发布时间】:2017-03-11 13:00:58
【问题描述】:

我有一个组和名称列表,如下面的 DF 所示。我希望按字母顺序排列此列表,并用逗号分隔每个名称,如下面的 DF2 所示。我以为这很简单,但事实证明它比预期的更具挑战性!

DF <- tibble::data_frame(
    Group = c(1, 1, 1, 2, 2, 3, 3, 3), 
    Name = c("A", "B", "C", "B", "A", "B", "C", "A"))

DF2 <- tibble::data_frame(
    Group = c(1, 2, 3), 
    Name = c("A, B, C", "A, B", "A, B, C"))

如果有任何帮助来解决这个问题,以解决每个组中列出的未知数量的名称,无论是否有 dplyr 管道,我都将不胜感激。

谢谢!

【问题讨论】:

  • DF %&gt;% group_by(Group) %&gt;% summarize(Comb = paste(Name[order(Name)], collapse = ","))怎么样?
  • @Abdou 或DF %&gt;% arrange(Name) %&gt;% group_by(Group) %&gt;% summarize(Comb = toString(Name))
  • @Frank 哦,太好了!

标签: r dataframe dplyr tidyr stringr


【解决方案1】:

在基础 R 中:

aggregate(Name~Group, DF, function(x) paste0(sort(x), collapse = ","))

#  Group  Name
#1     1 A,B,C
#2     2   A,B
#3     3 A,B,C

【讨论】:

    【解决方案2】:

    我们可以使用data.table

    library(data.table)
    setDT(DF)[order(Name), .(Comb = toString(Name)) , by = Group]
    

    【讨论】:

      猜你喜欢
      • 2013-07-26
      • 1970-01-01
      • 2014-12-02
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 2011-12-28
      相关资源
      最近更新 更多