R语言和集算器都具备优秀的分步运算能力,但在细节上有所不同,下面通过一个例子进行对比:
某公司的销售部门希望统计出优秀的销售员,即今年从1月份到上个月为止,每个月的销售额均是前3名的销售员。数据主要来自MSSQL数据库的订单表:salesOrder,主要字段包括订单编号:orderID,销售员姓名:name,销售额:sales,订单时间:salesDate。
解法大概是这样的:
1. 计算出年初和本月初的日期,按时间过滤出数据
2. 按月份和销售员分组,计算每个月每个销售员的销售额。
3. 按月份分组。计算分组内的销售额的排名。
4. 过滤每个分组内的前3名。
5. 求各分组的交集,即每个月都是前3名的销售员。
R的解法如下:
01 library(RODBC)
02 odbcDataSources()
03 conn<-odbcConnect("sqlsvr")
04 originalData<-sqlQuery(conn,'select *from salesOrder')
05 odbcClose(conn)
06 starTime<-as.POSIXlt(paste(format(Sys.Date(),'%Y'),'-01-01',sep=''))
07 endTime<-as.POSIXlt(paste(format(Sys.Date(),'%Y'),format(Sys.Date(),'%m'),'01'