2016-11-06 84 views
0

说我有以下数据帧:“非标”的职能概括功能

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和总结中粘贴应该做的伎俩:

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

但相反,我得到了“期望单个值”的错误。 group_by只能用于数字函数,如果有的话,是否有人知道是否有解决方法?

回答

2
df <- df %>% 
    group_by(Name) %>% 
    summarise(Instruments = paste(Instrument ,collapse=" ")) 

注意collapse

1

可能也是有用的nest的 '仪器' 为list

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

如果我们需要paste在一起,toString是一个方便包装为paste(..., collapse=", ")

+1

这实际上比我想要做的更有意义。你超越了解决基本的语法问题,并正确处理问题的核心。 – AffableAmbler