2016-04-21 77 views
0

我試圖循環訪問type = character的列名,並返回一個數據框,其中包含由ID字段分組的每個字符列的所有主要值。字符字段的主要計算

有沒有一種方法來複制在某種循環?:以下代碼

 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") 

還澄清我的問題,我添加了一個虛擬表: DF_Character_table

結果建議立即進行刪除這個樣子 Result Table

因此,對於第1組,佩特雷是第1列的主要名稱,汽車是主要的旅行模式。應分別計算第1列和第2列的優勢。

謝謝

+0

所有列名都是字符。你是指變量/列的模式/類型? – Jianfeng

+0

是的,我的意思是列中的變量是字符類型:即> class(DF_Characters $ Column_1) [1]「character」 – Kempie

回答

0

這可能不是最好的解決方案,但它的工作原理。

##########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") 
    }