R语言初级
# 基础知识:
getwd() setwd()
ls(\"package:ggplot2\") 列举出包中的所有函数 data(package=\"ggplot2\")
merge(dat1,dat2,by=\"ID\") 根据ID对两个数据进行合并 dat[c(-1,-2)] 去掉dat中的前两行
subset(dat,age>35&age<55,select=c(a1:a4)) 选定年龄在35到55之间的a1到a4列 quantitle(x,c(0.25,0.5,0.85)) 取分位数 diff(x,log=1) 一阶差分
scale(x,center = T,scale = T) 标准化处理 substr(x,start=1,stop=3) 截取1到3个字母 strsplit(x,split=\" \") 以空格为界对x进行拆分 toupper() tolower() summary(x) 描述性统计
#日期数据:
as.Date(\"2017/02/04\括号中的为自己数据的格式 difftime(A,B,units = \"weeks/days...\") 计算日期中间的间隔 %m %b英文简写月份 %B 英文全称月份 %Y 4位数的年份 %y 2位数年份 library(lubridate)
ymd(\"20170217\将会自动将所有的年月日数据转化为标准格式 mdy()
时间提取:
month(ymd(x),label=T) 提取x中的月份并用英文表示出来 day() wday(ymd(x)) 返回星期几
#数据预处理三大利剑: #1.plyr包 library(plyr)
aaply(matrix,1,mean) 返回数组 adply(matrix,1,mean) 返回数据框
laply(mylist,fun=mean) 输入列表,返回数组
dlply(iris,~Species,mean) 输入数据框,输出列表
ddply(dataframe,.variables = .(group,sex),function(x)lm(y~x,data=dataframe)) 按group和sex进行分类回归
#2.dplyr包 library(dplyr)
filter(tips,tips$day==\"sun\") 筛选
arrange(tips,desc(tip),total_bill) 按照tip的降序和total_bill的升序进行排序,默认是按照升序
rename(tips,bill=total_bill) 将total进行改名 levels(tips$sex)=distinct(tips,sex)
group=group_by(tips,smoker) 分组 dplyr包中的
summarise(group,count=n(),mean_tips=mean(tip),sd=sd(total_bill)) count=n()是指计数汇总 #数据合并:
inner_join(df_a,df_b,by=\"x\") 根据x对两个数据框有的部分进行合并 rbind(dat1,dat2) cbind(dat1,dat2)
merge(dat1,dat2,by=\"x\") 根据x直接合并,不考虑是否共有
#3.data.table包
dt=data.table(v1=1:2,v2=LETTERS[1:3],v3=rnorm(12,2,2),v4=sample(1:20,12)) data.table会自动对不够的部分采用循环进行填补 dt[,sum(v4)] 直接对v4列进行求和
dt[,list(sum_v4=sum(v4),mean_v4=mean(v4))]
dt[,c(\"v5\创造变量v5和v6并直接加入到dt数据框中 dt[,list(sumv3=sum(v3),mean_v4=mean(v4)),by=list(v2,v1)] 根据v1 v2进行分类汇总 dt[,.N,by=list(v1,v2)] 计数
dt[,list(v4_sum=sum(v4),by=v2)][v4_sum>40] 只要综合大于40的部分
#缺失值的识别与处理:
sum(is.na(x)) 计算缺失值的个数 x[!is.na(x)] 去除缺失值
定位缺失值: library(psych) describe(iris)
sapply(iris[,1:4],function(x)which(is.na(x))) 定位缺失值的位置
library(mice)
md.pattern(dataframe)=mice(df) 缺失值描述加可视化
mice_mod=mice(dataframe,method=\"rf/sample/pmm/logreg/norm\") mice_output=complete(mice_mod) 缺失值填补 library(VIM) 回归插补:
regressionImp(sleep+Gest+Span+Dream+NanD~Bodywgt,data=sleep)
Bodywgt为非缺失变量,其他的为缺失变量。用非缺失变量对缺失变量进行拟合
aggr(airquality,color=c(\"red\numbers指显示缺失值的比例,sortVars指按照缺失值的多少排序
#异常值与重复值: 1.离群点: library(car)
outlierTest(fit) 2.高杠杆指点:
fit=lm(weight~height,data=women) hat.plot(fit)
hat.plot=function(fit){
p=length(coefficients(fit)) n=length(fitted(fit))
plot(hatvalues(fit),main=\"Index Plot of Hat Values\") abline(h=c(2,3)*p/n,col=\"red\
identity(1:n,hatvalues(fit),names(hatvalues(fit))) }
3.强影响点: library(car)
avPlots(fit,ask=FALSE,id.method=\"identify\")
4.综合判断: library(car)
influencePlot(fit,id.method=\"identify\纵坐标超过[-2,2]为离群点
横坐标超过[0.2,0.3]为高杠杆指点 图形越大影响越强
#字符串处理:
nchar(x) 计算字符长度
strsplit(a1,split=\"/\") 根据/对a1字符进行拆分
substr(a1,start=1,stop=4)=\"aaaa\" 截取1到4位并换为aaaa 不规则截取:
grep(pattern=\"FRA|fra\将带有FRA或者fra的筛选出来 =grepl(pattren=\"FRA\TRUE) 最后一个表示将大小写的都提取出来
grep(pattren=\"[S|s][0-9]{2,4}\\\\b\从seq_nmaes序列的右端匹配 =grep(\"[S|s][0-9]{2,4}$\")
grep(\"\\\\bab\从最左端开始匹配 =grep(\"^ab\") 返回ab开头的
gusb(\"\\\\$\将money序列中的$去掉
regexpr(\"pp\返回text中pp开始的位置,如果没有返回一个负数
#正则表达式:
\\\\D=[^0-9] 匹配非0到9的 \\\\d=[0-9]
\\\\s 匹配空白 \\\\S匹配非空
\\\\< 以空白开头 \\\\> 空白结尾
#stringr与stringi包: str_c(\"a\
str_sub(yfx,c(1,4,8),c(2,6,11)) 截取yfx中的1到2 4到6... str_trim(string,side=\"both\") 去掉两边的空格 stri_cmp_eq(a1,a2) a1和a2是否完全相同 计数:
stri_count(language,regex=\"^J\") 统计以J开头的个数
stri_startswith_fixed(c(\"abaDc\从第二位开始匹配ba stri_endswith_fixed()
#描述性统计: library(psych)
tt=table() 频数统计 addmargins(tt,margin =c(1,2)) 对行和列求和
by(data,INDICES = list(data$a1,data$a2),FUN) 与dplyr中的group_by函数类似 xtabs(total_tips~sex+hightip,subset=tips$smokes=\"Yes\",data=tips) 筛选tips中的吸烟者, 并对sex和hightip进行分类,对total_tips进行汇总
x=xatbs(cbind(ncases,ncontrols)~agegp+alcgp,data=esaph) 分别对ncases和ncontrols进行分类汇总 ftable(x) 将两个列表进行合并
library(psych)
aggregate(data,by=list(Vs=mtcars$vs==1,high=mtcars$mpg>22),mean) 创建Vs和high margin.table(tt,1) 按行求和
#多种检验: 1.卡方检验: library(vcd)
mytab=xtabs(~a1+a2,data) chisq.test(mytab)
2.相关
cor(data,use=complete.obs,method=peason/spearman/kendall) use指对缺失值的处理方式,这里为成行删除
method 分别表示:恒定定量线性相关,定序变量,等级变量 cov() 协方差
pcor(c(1,5,2,3,6),cov(states)) 控制2 3 6时的1和5的偏自相关 cor.test(x,y) 相关性检验
pcor.test(pcor(),(2,3,6),n) n为样本数
3.t检验
t.test(prob~so,data=uscrime,alternative=\"two.side\") 根据so分类,对prob检验 t.test(y1,y2,paired = T) 非数据的检验
4.非参数检验 a.两组比较
wilcox.test(y~x,data) x分类 b.多组比较 各组
kruskal.test(y~x,data) 各组不
friedman.test(y~x,data)
#回归
fit=lm(weight~height,data=women) summary(fit)
fitted(fit) 拟合值 residuals(fit) abline(fit) x:z 表示x*z
x*y*z=x+y+z+x*y+x*z+z*y+x*y*z library(car)
scatterplotMatrix(data,spread=TRUE,smoother.args=list(lty=2)) hist(x,freq=TRUE) 绘制直方图加概率分布
#回归诊断 1.残差图
plot(residuals(fit)~x) 2.Q-Q图
qqplot(fit,id.method=\"identify\3.DW检验
dwtest(fit) library(lmtest) 4.同方差检验
ncv.test(fit) H0:同方差 library(car) 5.共线性检验
vif(fit) library(car)
#改进措施
1.违反线性假设
散点图矩阵 library(car)
boxTidwell(Murder~y = Population+Illiteracy,data=states) p>0.05不需要变化,用MLF的指进行指数化变化
2.异方差
spreadLevelPlot(fit) 同样为用给出的值指数化变化
3.逐步回归法 library(MASS)
stepAIC(fit,direction = \"backward\") library(leaps)
regsubsets(Muder~Population+Illiteracy+Income+Frost,data=staues,nbest=4) 个模型
#方差分析 1.单因素
fit=aov(response~trt) summary(fit) 2.多重比较 TukeyHSD(fit)
plot(TukeyHSD(fit)) 3.双因素
aov(len~supp*dose)
每次拟合4