2016-04-21 2 views
0

Ich versuche, meine Spaltennamen zu durchlaufen, wo Typ = Zeichen und einen Datenrahmen zurückgeben, der alle vorherrschenden Werte jeder Zeichenspalte enthält, gruppiert durch ein ID-Feld.Vorherrschende Berechnung für Zeichenfelder

Gibt es eine Möglichkeit den folgenden Code in einer Art Schleife zu replizieren ?:

 DF_Characters <- DF_Characters[,sapply(dfr,is.character)] 

##Predominance Column1## 
     Predom <- select(DF_Characters, Group_ID, Column_1) 
     Predom <- group_by(Predom,Group_ID, Column_1) 
     Predom <- summarise(Predom, 
          CountPredom = n() 
          ) 
     Predom <- arrange(Predom,Group_ID, desc(CountPredom)) 
     Predom <- data.table(Predom, key="Group_ID") 
     Predominant_Column_1 <- Predom[,head(.SD,1),by=Group_ID] 


##Predominant Column_2## 
     Predom <- select(DF_Characters, Group_ID, Column_2) 
     Predom <- group_by(Predom,Group_ID, Column_2) 
     Predom <- summarise(Predom, 
          CountPredom = n() 
          ) 
     Predom <- arrange(Predom,Group_ID, desc(CountPredom)) 
     Predom <- data.table(Predom, key="Group_ID") 
     Predominant_Column_2 <- Predom[,head(.SD,1),by=Group_ID] 

##Merge final table## 
     Merged <- merge(Predominant_Column_1 ,Predominant_Column_2 ,by="Group_ID") 

Auch meine Frage zu klären, ich eine Dummy-Tabelle hinzugefügt: DF_Character_table

Ergebnis wie folgt aussehen shoul Result Table

Also für Gruppe 1 war Petre der vorherrschende Name in Spalte 1 und Auto war die vorherrschende Art des Reisens. Spalte 1 und Spalte 2 Vorherrschaft sollte jeweils berechnet werden.

Vielen Dank

+0

Alle Spaltennamen sind Zeichen. Meinst du den Modus/Typ der Variablen/Spalte? – Jianfeng

+0

Ja, ich meine, wo die Variable in der Spalte vom Typ Charakter ist: d.h> Klasse (DF_Characters $ Column_1) [1] "Charakter" – Kempie

Antwort

0

Dies ist wahrscheinlich nicht die beste Lösung, aber es funktioniert.

##########Predominant Calculations 
    #Character fields 
    DF_Characters <- as.data.frame(dfr) 
    DF_Characters <- DF_Characters[,sapply(dfr,is.character)] 

    # Field names without the Group by id 
    CharactersToMerge <- c(names(DF_Characters)) 

    #Add Groupby ID to Character fields 
    Character_Field_List <- c("Groupby_ID", names(DF_Characters)) 
    DF_Characters <- subset(dfr,select = Character_Field_List) 

    #Column Names to loop through 
    DF_FieldsToMerge <- subset(dfr,select = CharactersToMerge) 


    # Predominant Table 
    fin_table <- DF_Characters %>% group_by(Groupby_ID) %>% 
        tally(sort = TRUE) #Count observations 

    # Loop and merge tables to Predominant Table 
    for(i in names(DF_FieldsToMerge)){ 

    temp_table <- DF_Characters %>% group_by_("Groupby_ID", i) %>% 
         tally(sort = TRUE) 
    temp_table <- temp_table[,head(.SD,1),by=Groupby_ID] #Remove ties 
    temp_table <- subset(temp_table,select = c("Groupby_ID", i)) #remove counts 

    fin_table <- merge(fin_table, temp_table, by="Groupby_ID") 
    }