2017-04-18 2 views
1

J'ai une trame de données qui a une liste de référence de personne, puis un échange, chaque référence de personne peut avoir plusieurs métiers. Je veux agréger afin qu'il montre les données comme ci-dessous:Agréger les variables de caractère/chaîne

Record Person Ref  Trade Code 
1  512  elec, plumbing, gas 
2  654   gas, plumbing 
3  685    elec 

Et ainsi de suite.

Le code que j'ai en ce moment est:

TEST<-aggregate(`Trade Code`~`Person Reference`, df, function(test) 
     paste(names(table(test)[rank(-1*table(test),ties.method="min")==1],collapse=NULL)) 

Ce qui donne l'erreur:

> Error: unexpected symbol in: "TEST<-aggregate('Trade Code'~'Person 
> Reference', age_arr, function(test) 
> paste(names(table(test)[rank(-1*table(test),ties.method="min")==1],collapse=NULL)) 
> View" 

Quelqu'un peut voir où je vais mal avec ça?

Répondre

1

Vous pouvez le faire avec dplyr et toString:

df <- read.table(text="Record Person_Ref Trade_Code 
1  512  elec 
1  512  plumbing 
1  512  gas 
2  654  gas 
2  654  plumbing 
3  685  elec",header=TRUE,stringsAsFactors=FALSE) 

df%>% 
group_by(Record,Person_Ref) %>% 
summarise(catY = toString(Trade_Code)) 

    Record Person_Ref    catY 
    <int>  <int>    <chr> 
1  1  512 elec, plumbing, gas 
2  2  654  gas, plumbing 
3  3  685    elec 
+0

qui a travaillé merci! – MLPNPC