【问题标题】:r data.table summarizing using more than one factorr data.table 使用多个因素进行汇总
【发布时间】:2015-04-23 08:33:10
【问题描述】:

我有下面的data.table

'data.frame':   66977 obs. of  16 variables:
 $ SUBS                         : int  
 $ CITY                         : Factor w/ 18 levels 
 $ VALUE_SEG                    : Factor w/ 7 levels 
 $ region                       : Factor w/ 5 levels 
 $ SUM.DATA_PPU_REV_DEC.        : num  
 $ SUM.DATA_BUNDLE_REV_DEC.     : int  
 $ SUM.DATA_USAGE_TOTAL_KB_DEC. : num  
 $ SUM.THIS_MONTH_REV_DEC.      : num  
 $ SUM.VOICE_ONNET_DURATION_DEC.: num  
 $ SUM.VOICE_ONNET_REV_DEC.     : num  
 $ SUM.VOICE_OFFNET_REV_DEC.    : num  
 $ SUM.SMS_ONNET_REV_DEC.       : num  
 $ SUM.SMS_OFFNET_REV_DEC.      : int  
 $ SUM.RECHARGE_DEC.            : int  
 $ STATUS_DEC                   : Factor w/ 5 levels 
 $ TYPE_DEC_2                   : Factor w/ 6 levels 

我想按两个因子变量对它进行分组,比如说 VALUE_SEG 和区域,获取数字的总和,并为每个因子变量创建新的 coulm 和观察计数。我尝试过聚合、ddply 和其他有 varians 类型错误的 :( 在此先感谢

【问题讨论】:

    标签: r dataframe data.table aggregate plyr


    【解决方案1】:

    这是一个使用data.table的选项

    library(data.table)
    setDT(data)[,lapply(.SD, function(x) if(is.numeric(x)) sum(x) else .N),
                              by= list(VALUE_SEG,region)]
    

    【讨论】:

      【解决方案2】:

      我建议您将数字变量和因子变量分开并使用dplyr 进行汇总。可能是这样的

      library(dplyr)
      
      data %>% select(VALUE_SEG,region,SUM..... all numeric variables) %>% 
         group_by(VALUE_SEG,region) %>% summarize_each(funs(sum)) -> summary1
      
      ## For factors
      
      data %>% select(VALUE_SEG,region,SUM..... all factors variables) %>% 
         group_by(VALUE_SEG,region) %>% summarize_each(funs(n)) -> summary2
      
      ## Then you can merge these results
      
      Summary <- merge(summary1,summary2,by="VALUE_SEG")
      

      有关使用此软件包的更多详细信息,请访问link

      【讨论】:

      • 感谢@koundy,我尝试了您的建议,但出现了以下错误 UseMethod("select_") 中的错误:没有适用于“select_”的方法应用于类“function”的对象
      • 你刚刚运行了这段代码吗?在select(..) 函数中,您应该编写所有数字/因子列名称。如果你能提供一个可重现的例子,最好检查一下。
      • 我的错误,我用 sub.nov %>% select(VALUE_SEG, region, SUBS + SUM.DATA_PPU_REV_NOV., SUM.DATA_BUNDLE_REV_NOV., SUM.DATA_USAGE_TOTAL_KB_NOV. , SUM.THIS_MONTH_REV_NOV., SUM. VOICE_ONNET_DURATION_NOV., SUM.VOICE_ONNET_REV_NOV., SUM.VOICE_OFFNET_REV_NOV., SUM.SMS_ONNET_REV_NOV., SUM.SMS_OFFNET_REV_NOV., SUM.RECHARGE_NOV.) %>% group_by(VALUE_SEG,region) %>% summarise(sum) -> summary1 但低于总结中的错误 ------ 错误:不是向量.. 感谢您的支持
      • 不是summarise。它的summarize_each(funs(sum)) 总结所有列
      • function_list[[k]](value) 中的错误:找不到函数“summarize_each”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 2015-12-25
      相关资源
      最近更新 更多