R-Language与集算器比拟——行间运算
当前位置:以往代写 > 其他教程 >R-Language与集算器比拟——行间运算
2019-06-14

R-Language与集算器比拟——行间运算

R-Language与集算器比拟——行间运算

行间计较很常见,累计,同期比,环比这些城市涉及到。R语言和集算器都有很好的行间计较本领,但又略有区别。下面这个例子涉及一些根基的行间运算,但愿通过它说明二者的区别:

    某公司的销售部分但愿统计出优秀的销售员,即给公司提供前一半销售额的销售员,数据主要来自MSSQL数据库的订单表:salesOrder,主要字段包罗订单编号orderID,销售员姓名name,销售额sales,订单时间salesDate。

    较量直观的解法是:

  • 1.先按销售员汇总,求得每个销售员的销售额.
  • 2.将上一步的数据凭据销售额逆序排序
  • 3.在上一步中求各笔记录的累计值。并求出较量尺度:公司销售总额的一半。
  • 4.找到上一步中累计值能切合以下条件的销售员的列表:小于便是较量尺度;可能固然大于较量尺度,但上一个销售员是小于较量尺度的。
  • R语言的详细写法是这样的:
    01 library(RODBC)
    02 odbcDataSources()
    03 conn<-odbcConnect(“sqlsvr”)
    04 originalData<-sqlQuery(conn,’select * from salesOrder’)
    05 odbcClose(conn)
    06 nameSum<-aggregate(originalData$sales,list(originalData$name),sum)
    07 names(nameSum)<-c(‘name’,’salesSum’)
    08 orderData<-nameSum[rev(order(nameSum$salesSum)),]
    09 halfSum<-sum(orderData$salesSum)/2
    10 orderData$addup<-cumsum(orderData$salesSum)
    11 subset(orderData,addup<=halfSum | (addup>halfSum & c( 0, addup[- length (addup)])
    ))

    下面是集算器的写法:

        先看看计较累计值有什么差异:

        R语言在line 10利用cumsum求累计值。
        集算器在A4格利用cumulate求累计值。

        两者写法都很利便,但集算器的运算道理是针对每条记载,先算一遍cumulate,然后凭据行号#取得这条记载对应的累计值。而R语言是只计较一遍,因此效率上比集算器高。

        把集算器的这句拆成两句可以办理效率的问题,即先单独算累计值列表,再插入到原数据会合。但这种写法又不如只需要一句代码的R语言简洁。

        接着看看计较切合条件的销售员时,有什么差异:

        R语言在Line 11完成这项计较,主要用了移动行的步伐,利用c( 0, addup[- length (addup)])结构了一列新数据。和addup这列对比,新列只是向下移动了一行,去掉了最后一条数据并补上了第一条的0。这样就可以举办较量了:累计值是否小于较量尺度? 可能固然大于较量尺度但上一条记载是否小于较量尺度?

        R语言不能直接会见相对位置的数据,所以回收了”让相对位置的数据移到当前位置”的步伐,固然结果是一样的,但这个写法不足直观,需要阐明者具备较高的逻辑思维本领。

        集算器的写法是select(addup<=B3 || (addup>B3 && addup[-1]<B3))。这是集算器特有的相对位置表达要领,即可以用[-1]这种要领暗示相对付当前记载的前1条或后几条记载。好比A4中的累计值的计较,也可以写成A3.derive(addup[-1]+salesSum:addup)。

        和累计值的牢靠算法差异,这一步算法更自由。可以看到集算器的相对位置表达方法较量机动,优势较大。

        通过上面的例子可以看到,相对位置和行间运算运算可以办理许多看似巨大的问题,集算器在表达相对位置时更机动,因此在举办巨大问题计较时预计会轻松很多。

        R语言在整列整行的追加以及牢靠算法方面写法例越发简洁,给人留下的印象同样深刻。

     

     

     

    本文转载自:http://www.raqsoft.cn/?p=3531

      关键字:

    在线提交作业