几个有用的R小函数

最近写的代码基本是R脚本了,越发感到R的强大。现在用它做一些数据分析以及进行一些模拟。


收几个常的函数在这里。

1. 批次替换data frame中的数据

     i. 将所有为0的数据替换为100

        res2$dnst[res2$dnst %in% 0]<-100 

     ii.将NA替换为0

         res2$dnst[is.na(res2$dnst)]<-0  


2. CDF line

CDF(累积分布函数)是一个好工具,可以清楚的了解数据的分布情况。


showCDF<-function(data,field){

  res_cdf=ecdf(data)

  plot(res_cdf,main=paste(‘CDF of‘,field))


  #显示中位数、上四分位,最大值,以及最大值的2倍(视情况,可以去掉)

  summaryData=boxplot.stats(data)$stats

  summaryData[6]=summaryData[5]*2


  for(index in 3:length(summaryData)){

    tempV=as.numeric(summaryData[index])

    R_value=floor(res_cdf(tempV)*10000)/100


    lines(c(tempV,tempV),c(R_value/100,0),col=‘red‘,lwd=2,lty=3)


    label=paste(‘<-‘,floor(tempV*100)/100,‘:‘,R_value,‘%‘,sep=‘‘)

    text(tempV,index*0.15,label,cex=0.8,adj=c(0,1))

  }

}

效果:

几个有用的R小函数


*以字段名的取值会提高应用的灵活性,如下所示:

  as.matrix(res[c(‘data‘)]) 等价于res$data



3. 从MySQL中读取数据

library(‘RMySQL‘)

readDataFromMySQL<-function(tableName,targetDate){

  drv<-dbDriver(‘MySQL‘)

  con<-dbConnect(drv,host=‘xxx.xxx.xxx.xxx‘,port=3006,username=‘xx‘,password=‘xxxx‘,dbname=‘xxxx‘)

  sqlStatement=paste("select * from ",tableName)


  if(nchar(targetDate)>0){

    sqlStatement = paste(sqlStatement," where date=‘",targetDate,"‘",sep=‘‘)

  }

  print(sqlStatement)

 

  data=dbGetQuery(con, sqlStatement)

  dbDisconnect(con)

  return(data)

}



4. 问题求解

对于Header First数据分析中第3章最优化问题的求解, 需要在系统上安装lpsolve包及R的工具包:lpSolve和lpSolveAPI。

library(lpSolve)


f2.obj<-c(5,4)

f2.con<-matrix(c(1,0,0,1,100,125),nrow=3,byrow=T) 

f2.dir<-c(‘<=‘,‘<=‘,‘<=‘)

f2.rhs<-c(400,300,50000) 

lp(‘max‘,f2.obj,f2.con,f2.dir,f2.rhs)$solution 


参考:http://lpsolve.sourceforge.net/5.5/R.htm


5. 从命令行执行时获取参数

#main entry

args <- commandArgs(trailingOnly = TRUE)

if(length(args)<1) {

  print("Wrong parameters, please specify the target date!",quote = F)

} else {

  callProcessFunction(args[1])

}


这样在执行时可以类似如下方式:

     Rscript xxx.R  2014-01-13



6. 通过箱形图(BoxPlot)去除异常数据 

removeOutData<-function(data){

  result = data[!data %in% boxplot.stats(data)$out]

  return (result) 

}


7.使用字串过滤数据

filterData<-function(data,url){

  rows=grep(url,data$url)

  return(data[c(rows),])

}


8. 使用ggplot2绘图

ggplot2提供非常强大的功能,如果plot系列需要多次绘制,ggplot2基本可以一句搞定,非常值得学习应用。

放一张在这里供参考:

几个有用的R小函数


9. Bars

drawBars<-function(data,xlab) {
  labels <- c("A", "B", "C","D")
  
  maxValue=max(max(data$A),max(data$B),max(data$C),max(data$D))
  ylim<-c(0,maxValue*1.1)
  
  datax<-rbind(data$A,data$B,data$C,data$D)
  barplot(t(datax),beside=TRUE,col=terrain.colors(length(data$t0)),offset=0,names.arg = labels,ylim=ylim,xlab=xlab)
  box()
}

效果:

几个有用的R小函数


10.分类

dataCluster<-function(data,col,clusterNum) {
  require("fpc")
  require(cluster) 
  
  z2<-na.omit(data[,col])
  
  km <- kmeans(z2, clusterNum)
  
  clusplot(data, km$cluster, color=TRUE, shade=TRUE, labels=2, lines=0)
}

效果:

几个有用的R小函数

*数据可视化可以帮助分析问题,比如分析加载流程:

几个有用的R小函数



几个有用的R小函数

上一篇:MySql--基本查询语句


下一篇:WPF 模拟UI 键盘录入