2017-03-17 4 views
-1

Ich verwende die folgende Funktion, um eine Aggregationsoperation auszuführen, die die Freigabe nach bestimmten Labels berechnet.Spalten ändern Namen der Aggregationsausgabe

computeShare <- function(df, colX, colY) { 
    aggregate(as.formula(paste0(colY, '~', colX)), 
      df, function(x){length(x)/nrow(df)}) 
} 

df_out <- computeShare(some_df, "colx", "coly") 

Dies gibt Ausgang df_out wie unten mit

  colx   coly 
1   name1 1.897315e-02 
2   name2 2.988709e-04 
3   name3 7.081621e-04 

Statt Spaltennamen coly in df_out oben, ich die Share Namen will. Ich kann es über colnames(df_out)[2] <- "Share" innerhalb der Funktion wie folgt tun.

computeShare <- function(df, colX, colY) { 
     df_out <- aggregate(as.formula(paste0(colY, '~', colX)), 
       df, function(x){length(x)/nrow(df)}) 
     colnames(df_out)[2] <- "Share" 
     df_out 

    } 

Ist dies der richtige Weg?

+0

Sie müssen den Formelansatz für Aggregat nicht verwenden. Sie können stattdessen die 'list'-Methode verwenden, mit der Sie Namen hinzufügen können. – A5C1D2H2I1M1N2O1R2T1

+0

@ A5C1D2H2I1M1N2O1R2T1 - Können Sie den Listenansatz näher erläutern? – user3206440

+0

Wie in 'mit (df, Aggregat (Liste (share = coly), Liste (Colx = Colx), Funktion (x) {Länge (x)/nrow (df)}))' oder so ähnlich ... – A5C1D2H2I1M1N2O1R2T1

Antwort

0

haben Sie versucht setNames(aggregate(...), c("group","Share"))?

Verwandte Themen