【问题标题】:"non-standard" functions within dplyr summarise functiondplyr 中的“非标准”函数汇总函数
【发布时间】:2017-03-19 14:01:27
【问题描述】:

假设我有以下数据框:

    df<-data.frame(Name=c(rep("John",3),rep("Paul",2),rep("George",2),"Ringo"),
    Instrument=c("Guitar","Piano","Drums","Piano","Bass","Guitar","Sitar","Drums"))
    > df
        Name Instrument
    1   John     Guitar
    2   John      Piano
    3   John      Drums
    4   Paul      Piano
    5   Paul       Bass
    6 George     Guitar
    7 George      Sitar
    8  Ringo      Drums

我想做的是按名称分组并拥有不同的乐器 连接成一个字符串,如:

    Name        Instruments
    1   John Guitar,Piano,Drums
    2   Paul         Piano,Bass
    3 George       Guitar,Sitar
    4  Ringo              Drums

我认为使用 group_by 和 paste 应该可以解决问题:

    library(dplyr)
    df <- df %>%
      group_by(Name) %>%
      summarise(Instruments = paste(Instrument,sep=","))

但相反,我收到“期望单个值”错误。 group_by 是否仅适用于数字函数,如果是,有人知道是否有解决方法吗?

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    nest 'Instrument' 作为list 也可能有用

    library(dplyr)
    library(tidyr)
    df %>% 
       group_by(Name) %>%
       nest(Instrument)
    

    如果我们需要将paste 放在一起,toStringpaste(..., collapse=", ") 的便捷包装器。

    【讨论】:

    • 这实际上比我试图做的更有意义。您不仅解决了基本的语法问题,而且直指问题的核心。
    【解决方案2】:
    df <- df %>%
      group_by(Name) %>%
      summarise(Instruments = paste(Instrument ,collapse=" "))
    

    注意collapse

    【讨论】:

      猜你喜欢
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多