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(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"
求向量x与向量y中不同的元素(只取x中不同的元素)
setdiff(x, y)
setdiff(x=1:4, y=2:3)
[1] 1 4
两个向量的交集
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]])