R常用自带函数总结

1. R语言中取整运算主要包括以下五种:
floor():向下取整;ceiling(): 向上取整;round(): 四舍五入取整;turnc(): 向0取整;signif(): 保留给定位数的精度。
floor返回对应数字的'地板'值,即不大于该数字的最大值;
ceiling返回对应数字的'天花板'值,就是不小于该数字的最小整数;
round是R里的'四舍五入'函数,具体的规则采用banker's rounding,即四舍六入五留双规则(wiki)。round的原型是round(x, digits = 0), digits设定小数点位置,默认为零即小数点后零位(取整)。
trun的特性是'向零截取', 也就是说对于一个数字a,它将数轴分成两侧,trunc(a)将返回数轴上包含数字0的那一侧离a最近的那个整数。
signif是保留有效数字的函数。常用于科学计数。

2. unique返回对象的不同取值,如“unique(c(1,1,2,3)) ”返回1 2 3
duplicated 判断对象的每个取值是否重复,如“duplicated(c(1,1,2,3)) ”返回逻辑。
grep()
grepl()返回逻辑

3. file.info():参数是表示文件名称的字符串向量,函数会给出每个文件的大小、创建时间、是否为目录等信息。
dir():返回一个字符向量,目录中所有文件的名称。如果可选参数recursive=TRUE,结果将把整个目录树都显示出来。
file.exists():返回一个布尔向量,表示作为第一个参数的字符串向量中给定的每个文件名是否存在。
getwd()和setwd():用于确定或改变当前工作目录。

 

4.     basename():    取文件路径中的文件名

        substr(x,1,4):    取x字符串中1到4的字符
        substr(x, 2, nchar(x))     将第一位去掉

5.   union()   求两个向量的并集
     setdiff()  求向量x与向量y中不同的元素(只取x中不同的元素)
     intersect()  求两个向量的交集

union

求两个向量的并集 
集合可以是任何数值类型

union(x=1:3, y=2:5)
[1] 1 2 3 4 5

union(x=c("abc", "12"), y=c("bcd", "efg"))
[1] "abc" "12"  "bcd" "efg"

setdiff

求向量x与向量y中不同的元素(只取x中不同的元素) 
setdiff(x, y)

setdiff(x=1:4, y=2:3)
[1] 1 4

intersect

两个向量的交集

intersect(x=c(1:5, NA), y = c(2:5, NA))
[1]  2  3  4  5 NA

# 两个字符串向量的交集只有一个元素 "abc"
intersect(x=c("abc", "bcd"), y = c("abc", 12, "apple"))
[1] "abc"

6.  sprintf("%06d",vector)也可以

7.help(package="包名")来输出某个包的简短描述以及包中的函数名称和数据集名称的列表。

8.正则表达式:

rm(list=ls())
options(stringsAsFactors=F)
tmp <- readLines("~/tmp.txt")
for (i in 1:length(tmp)) {
#  i=1
#  print(tmp[i])
   first.i <- sub("([A-Z]+)_([A-Z]+)\\d+.png","\\1",tmp[i])
   end.i <-sub("([A-Z]+)_([A-Z]+)\\d+.png","\\2",tmp[i])
   if(first.i==end.i){print(tmp[i])}

9.函数块

# proc.viewT0 <- function(){
#   fileList <- dir("/public/portSettle/output/report/",pattern="^report.2.+csv$",full.names=T)
#   tmp.out <- rbindlist(lapply(fileList, function(file.x){
#     ##cat(file.x,"\n")
#     date.x <- sub("report\\.(.+)\\.csv","\\1",basename(file.x))
#     if(date.x<="2018-02-08") return(NULL)
#     res <- read.table(file.x,header=T,sep=",",fileEncoding="gbk")
#     res$date <- date.x
#     res
#   }))
# }

10.从MySQL数据库里读取汉字到R
conn <- dbConnect(MySQL(),dbname="confluence",username="root",password="*****",host="*****",port=3306)
dbSendQuery(conn,'SET NAMES gbk')  //windows
sql_AG_CLIENT <- "select * from AG_CUSTOMER;"
master <- dbGetQuery(conn,sql_AG_CLIENT)
dbDisconnect(conn)
dbSendQuery(conn,'SET NAMES utf8') //linux

从R写入到MySQL出现乱码问题的解决方法:
conn <- dbConnect(MySQL(),dbname="confluence",username="root",password="*****",host="*****",port=3306)
dbSendQuery(conn,'SET NAMES gbk')
strSQL<-paste0('insert into AG_CUSTOMER (CustomerID,CustomerName) values',
paste0(sprintf("(%i,'%s')",tmp$CustomerID,tmp$CustomerName),collapse = ','))
rs <- dbSendQuery(conn,strSQL)
#dbWriteTable(conn,"AG_CUSTOMER",tmp,append=T,row.names=F)
dbClearResult(rs)        //清空结果集
dbDisconnect(conn)    
完美解决R与MySQL之间汉字编码问题。
 

11.linux research2 上安装R包命令:
           source /etc/bashrc

12.linux上调用R脚本函数传参

Rscript -e 'source("dingdingCode.R");funDingding(1)'

13.
  tmpOrd <- tmpOrd[order(tmpOrd$fileTime),]
  tmpOrd.new <- subset(tmpOrd, !duplicated(oid,fromLast=T))

14.tmp <-sapply(strsplit(system('tasklist',T)," +"),"[",1)

15.① 取重vector等
                 函数使用duplicated();
     ②data.frame
                 tmp2 <- tmp[duplicated(tmp$V1),]
     ③code一样,qty相加
                tmp <- setDT(tmp)
                x <- tmp[,.(Qty =sum(qty)),keyby=.(Code=code)]

16.data.frame 分nums段
if(nums>1){
    cnt$label <- with(cnt, as.numeric(cut(as.numeric(V1), c(-Inf,quantile(as.numeric(V1), 1:(nums-1)/nums),Inf))))
    tapply(1:nrow(cnt), cnt$label, function(ind){
      cnt.x <- cnt[ind,]
      print(cnt.x)
      # print(cnt.x$label)
      file.out <- paste0("D:/algoReb/rebTask/rebTask.",name.to,"_",cnt.x$label[1],".",today,".csv")
      cnt.x$label <- NULL
      if(!file.exists(file.out))
        write.table(cnt.x,sep=",",col.names=F,file=file.out,row.names=F,quote=F)
    })
  }

17.news$status[news[,6]>=0.95] <- "A"
table 函数内处理成data.frame(一维二维都可以)
str(news)  --> data.frame
ta <- table(news$status,useNA="always")
as.data.frame(t(matrix(as.vector(ta),nrow=NROW(ta),dimnames=dimnames(ta))))

一些常用技术分析语句:data.table
①tb_1[,.(sum_status=as.vector(table(status))),keyby=.(code=V5)]
②setkeyv(tmp,c("QuoteID","timePoint"))
tmp <- merge(tmp,dt.plot,all.x=TRUE) ####两列唯一匹配,一列唯一匹配f.hash()
③tmp[tmp2,on=.(quoteID,timePoint)] ###多列匹配
④tmp[,.(taskValue=sum(taskValue)),by=.(prodName,date)]多列条件筛选
⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮

一些常用技术分析语句:data.frame

场景一:子集剔除法 

a <- data.frame(x=c(1:5),y=c(5:1),z=letters[1:5])
b <- data.frame(x=c(1,2),y=c(5,4))
subset(a,!is.element(paste0(x,".",y),paste0(b$x,".",b$y)))

场景二:改变data.frame的列中的元素

a <- data.frame(x=c(1:5),y=c(5:1),z=letters[1:5])
a$y[满足条件]=0
 

sub("([a-z]+)[A-Z].*","\\1",sapply(strsplit(ans$prodName,"_"),"[[",1))

18. 将函数内的变量变成全局变量,assign("d.map",d.map,envir=.GlobalEnv)

19.不用data.table的key处理,按prodName和date合并:
for(name.x in setdiff(names(res.sum), c("prodName","date")))
    d.map[[name.x]] <- f.hash(d.map$prodName, res.sum$prodName, res.sum[[name.x]])

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(R语言)