R学习笔记(持续更新中)

it2026-03-28  9

本人是从2015年4月份开始接触R语言的,那时候我还在上大四,考研复试结果已经出来了,毕业论文也写得差不多了,距离9月份研究生入学还有5个多月的时间,所以就想着利用这段时间干点啥事情,所以就开始一边学车一边准备一下读研需要的基础知识和技能,R语言便是其中之一。说起了惭愧,虽然本人专业是统计学但是在本科阶段却并没有接触过R语言(虽然R语言是统计建模专用语言),本科阶段统计建模和数据分析主要使用的工具是SPSS、SAS,时间序列用EVIEWS,代数和数值计算用MATLAB,运筹学用LINGO。考研复试面试的时候被问到会不会R语言然后一脸懵逼,看来R语言是统计专业学生必备技能之一,所以就买了两本R语言的书开始自学,一本是《R语言实战》一本是暨南大学出版社的《数据统计分析及R语言编程》,是暨大经院统计系王斌会老师主编的一本书,后来想起来考研复试面试时问我R语言问题的好像就是王斌会老师,O(∩_∩)O哈哈~。   实践一: x=1:100 #把1,2,。。。100个整数向量赋值到x (x=1:100) #同上,只不过显示出来 sample(x,20) #从1,2,。。。,100中随机不放回地抽取20个值做样本 set.seed(0);sample(1:10,3) #先设随机种子,再抽样 z=sample(1:20000,10000) #从1到20000中不放回抽取10000个样本 z[1:10] #方括号中为向量z的下标 y=c(1,3,7,3,4,2)  z[y] #以y为下标的z的元素值 (z=sample(x,100,rep=T)) #从x中有放回地随机抽取100个值做样本 (z1=unique(z))  length(z1) #z1中不同的元素个数 xz=setdiff(x,z) # x和z之间的不同元素 —— 集合差 sort(union(xz),z) #对xz以及z的并的元素从小到大排序 setequal(union(xz,z),x) #xz以及z的并的元素与x是否一样 intersect(1:10,7:50) #两个数据的交 sample(1:100,20,prob=1:100) #从1:100中不等概率随机抽样,各个数字被抽到的概率与其值成比例     实践二:   pi*10^2 # "*"(pi, "^"(10,2)) # pi*(1:10)^-2.3 #可以对向量求指数幂 x=pi*10^2 # x print(x) # (x=pi*10^2) #赋值带打印 pi^(1:5) #指数也可以是向量 print(x,digits=12) #输出x的12位数字   实践三(关于R的对象类型等)   x=pi*10^2 # class(x) # x的class typeof(x) # x的type class(cars) # cars是R中自带的数据 typeof(cars) #cars的type names(cars) # cars数据的变量名字 summary(cars) # cars的汇总 head(class) #  cars的头几行数据,和cars[1:6,]相同 tail(class) # cars的最后几行数据 str(cars) # 也是汇总 ??? row.name(cars) # 行名字 attributes(cars) #cars的一些信息 class(dist~speed) # 公式形式 ,“~”的左边是因变量,右边是自变量 plot(dist~speed,cars) # 两个变量的散点图 plot(cars$speed,cars$dist) # 同上     实践四(包括简单自变量为定变量 及定性变量的回归)   ncol(cars),nrow(cars) #cars的行列数 dim(cars) # cars的维数 lm(dist~speed, data =cars) #一dist为因变量,speed为自变量做OLS,,, cars$qspeed = cut(cars$speed, breaks=quantile(cars$speed),include.lowest=TRUE) #增加定性变量qspeed,四分点位为分割点 names(cars) #数据cars多了一个变量 cars[3] #第三个变量的值 ,和  cars[,3]类似 table(cars[3]) #列表 is.factor(car$speed) # plot(dist~speed,data=cars) #点出箱线图 (a=lm(dist~speed, data=cars)) #拟合线性模型(简单最小二乘回归) summary(a) #回归结果(包括一些检验)     实践五(简单样本描述统计量)   x<-round(runif(20,0,20),digits=2) #四舍五入 summary(x) # 汇总 min(x),max(x) range(x) # 极值 范围 median(x) #中位数 mean(x) #均值 var(x) #方差 sd(x) # 标准差 sqrt(var(x)) #平方根 rank(x) # 秩(rank) order(x) # 升幂排列的x的下标 order(x,decreasing=T) #降幂排列的x的下标 x[order(x)] #和sort(x) 相同 sort(x,decreasing=T) sort(x,dec=T) #降幂排列的x sum(x);length(x) #元素和 以及向量的个数 round(x) 等同于round(x,0) 而round(x,5) 表示保留小数点后5位 fivenum(x), # 五数汇总 quantile(x)  #分点位 quantiles(different convention) quantile(x,c(0,.33,.66,1)) # mad(x)# "median average distance": cummax(x) #累积最大值 cummin(x) #累积最小值 sumprod(x) #累积积 cor(x,sin(x/20)) #线性相关系数 (correlation)     实践六(简单图形)   x=rnorm(200) #200个随机正态数赋值到x hist(x, col="light blue") #直方图 histogram rug(x) #在直方图下面加上实际点的大小 stem(x) # 茎叶图 x<-rnorm(500) #  y<-x+rnorm(500) #构造一个线性关系 plot(y ~x) #散点图 a=lm(y~x) # 做回归 abline(a,col="red") # 加拟合线 同abline(lm(y~x),col="red")  print("Hello world!") #打印 paste("x的最小值= ",min(x)) # demo(graphics) # 演示画图(点Enter切换)     实践七(复数运算和求函数极值)   (2+4i)^-3.5+(2i+4.5)*(-1.7-2.3i)/((2.6-7i)*(-4+5.1i)) #复数运算 (z<-complex(real=rnorm(10),imaginary=rnorm(10))) #一个10维复向量,实部和虚部均为10个标准正态样本点 complex(re=rnorm(3),im=rnorm(3)) #3维复向量 Re(z) # 实部 Im(z) # 虚部 Mod(z) # 模 Arg(z) # 辐角 choose(3,2)  #组合 factorial(6) #排列6! #解方程: f=function(x) x^3-2*x-1  uniroot(f,c(0,2)) #迭代求根 #如果知道根为极值 f=function(x) x^2+2*x+1 #定义一个二次函数 optimize(f,c(-2,2)) #在区间(-2,2) 求极值     实践八 (字符型向量)   a=factor(letter[1:10]) #letters:小写字母的向量,LETTERS:大写字母的向量 a[3]="w" #不行,警告! a=as.character(a) #转换一下 a[3]="w" #可以了 a;character(a) #两种不同的类型     实践九 (数据输入输出)   x=scan() # x=c( 1.5 , 2.6,  3.7,  2.1,  8.9, 12.0, -1.2, -4.0) # w=read.table(file.choose(),header=T) #从列表中选择有变量名的数据 setwd("f:/2013stat") set("f:\2013stat") #建立工作路径 (x=rnorm(20)) #给x赋值20个标准正态数据值 write(x,"f:/2013stat/test.txt") #把数据写入文件 y=scan(x,"f:/2013stat/test.txt");y #扫描文件数值数据到y y=iris;y[1:5,];str(y) #iris是R自带数据 write.table(y,"test.txt",row.name=F) #把数据写入文本文件 w=read.table("f:/2013stat/test.txt",header=T) #读带有变量名的数据 str(w) #汇总 write.csv(y,"test.csv") #把数据写入csv文件 v=read.csv("f:/2013stat/test.csv") #读入csv数据文件 str(v) #汇总 data=read.table("clipboard") #读入剪贴板的数据     实践十(序列)   (z=seq(-1,10,length=100)) # -1到10等间隔的100个数的序列 z=seq(-1,10,length=100) #同上 (z=seq(10,-1,-0.1)) #10到-1间隔为-0.1的序列 (x=rep(1:3,3)) #三次重复1:3 (x=rep(3:5,1:3)) # x=rep(c(1,10),c(4,5)) # w=c(1,3,x,z) #w[3]把数据(包括向量)组合成一个向量 x=rep(0,10);z=1:3;x+z #向量加法,警告信息:                                  In x + z : 长的对象长度不是短的对象长度的整倍数 x*z #乘法 rev(x) #颠倒次序 z=c("no cat ","has","nine","tails") #字符向量 z[1]=="no cat" #逻辑等式 z=1:5 # z[7]=8;z # z=NULL # z[c(1,3,5)]=1:3 # z # rnorm(10)[(2,5)] # z[-c(1,3)] #去掉第1,3个元素 z=sample(1:100,10);z # which(z==max(z)) #给出最大值的下标     实践十一 (矩阵)   x=sample(1:100,12);x #抽样 all(x>0);all(x!=0);any(x>0);(1:10)[x>0] #逻辑符号的应用 diff(x) #差分 diff(x,lag=2) #差分 x=matrix(1:20,4,5);x #矩阵的构造 x=matrix(1:20,4,5,byrow=T);x #矩阵的构造,按行排列 t(x) #矩阵转置 x=matrix(sample(1:100,20),4,5) # 2*x # x+5 # y=matrix(sample(1:100,20),5,4) # x+t(y) #矩阵之间相加 (z=x%*%y) #矩阵相乘 z1=solve(z) # solve(a,b)可以解ax=b方程 round(z1%*%z,14) #四舍五入 b=solve(z,1:4);b #解联立方程     实践十二 (矩阵继续)   nrow(x),ncol(x),dim(x) #行列数目 x=matrix(rnorm(24),4,6) # x[c(2,1),] #第2和第1行 x[,c(1,3)] #第1和第3列 x[2,1] #第【2,1】元素 x[x[,1]>0,1] #第1列大于0的元素 sum(x[,1]>0) #第1列大于0的元素的个数 sum(x[,1]<=0) #第1列不大于0的元素的个数 x[,-c(1,3)] #没有第1和3列的x diag(x) #x的对角线元素 diag(1:5) #以1:5为对角线,其它元素为0的对角线矩阵 diag(5) #5维单位矩阵 x[-2,-c(1,3)] #没有第2行、第1,3列的x x[x[,1]>0&x[,3]<=1,1] #第1列大于0且第3列小于等于1的第1列元素 x[x[,2]>0|x[,1]<3,1] #第2列大于0或者第1列小于3的第1列元素 x[!x[,2]<3,1] #第1列中 相应于第2列中 >=3的元素 apply(x,1,mean) #对行(第一维)求均值 apply(x,2,sum) #对列(第二维)求和 x=matrix(rnorm(24),4,6) # x[lower.tri(x)]=0;x #得到上三角阵  x[upper.tri(x)]=0 #得到下三角阵     实践十三 (高维数组)   x=array(runif(24),c(4,3,2)) #用24个服从均匀分布的样本点构造4乘3乘2的3维数组 is.matrix(x) dim(x) #得到维数 is.matrix(x[1,,])#部分三维数组是矩阵 x=array(1:24,c(4,3,2))  x[c(1,3),,] # apply(x,1,mean) #可以对部分维做求均值运算 apply(x,1:2,sum) #可以对部分维数做求和运算 apply(x,c(1,3),prob) #对部分维数求乘积     实践十四 (矩阵与向量之间的运算)   x=matrix(1:20,5,4) #5乘4矩阵 sweep(x,1,1:5,"*") #把向量1:5的每个元素乘到每一行 sweep(x,2,1:4,"+") #把向量1:4的每个元素加到每一列 x*1:5 #把向量1:5的每个元素乘到每一行 (x=matrix(sample(1:100,24),6,4));(x1=scale(x)) # (x2=scale(x,scale=F)) # (x3=scale(x,center=F)) # round(apply(x1,2,mean),14) # apply(x1,2,sd) # round(apply(x2,2,mean),14);apply(x2,2,sd) # round(apply(x3,2,mean),14);apply(x3,2,sd) #     实践十六 (缺失值、数据的合并)   airquality #有缺失值(NA)的R自带数据 complete.cases(airquality) #判断每行有没有缺失值 which(complete.cases(airquality)==F) #有缺失值的行号 sum(complete.cases(airquality)) #完整观测值的行数 na.omit(airquality) #删去缺失值的数据 #附加,横或竖合并数据:append,cbind,rbind x=1:10;x[12]=3  # (x1=append(x,77,after=5))  #在第5项后面添加 77 cbind(1:5,rnorm(5))  # rbind(1:5,rnorm(5))  # cbind(1:3,4:6);rbind(1:3,4:6)  # #去掉矩阵重复的行 (x=rbind(1:5,runif(5),1:5,7:11))  # x[!duplicated(x),] # unique(x) #     实践十六(list)   z=list(1:3,Tom=c(1:2,a=list("R",LETTERS[1:5]),W="hi")) z[[1]];z[[2]] z$T z$T$a2 z$T[[3]] z$T$w     实践十七 (条形图和表)   x=scan() 3 3 3 4 1 4 2 1 3 2 5 3 1 2 5 2 3 4 2 2 5 3 1 4 2 2 4 3 5 2  barplot(x) table(x) barplot(table(x)) barplot(table(x)/length(x)) table(x)/length(x)     实践十八(形成表格)   library(MASS) #载入软件包MASS quine #MASS所带数据 attach(quine) #把数据变量的名字放入内存  #下面是从该数据得到的各种表格 table(Age) # table(Sex,Age); # tab=xtabs(~Sex+Age,quine); # unclass(tab) # tapply(Days,Age,mean) # tapply(Days,list(Sex,Age),mean) # detach(quine) #attach的逆运行     实践十九(如何写函数)   ss=function(n=100){  z=2; for(i in 2:n) if(any(i%%2:(i-1)==0)==F) z=c(z,i); return(z) }#求n以内的素数 fix(ss) #用来修改任何函数或者编写一个新函数 ss() #计算100以内的素数 t1=Sys.time() #纪录系统时间点 ss(10000) #计算10000以内的素数 Sys.time()-t1 #费了多少时间 system.time(ss(10000)) #计算执行ss(10000)所用时间 #函数可以不写return,这时最后一个值为return的值 #为了输出多个值最好使用list输出     实践二十(画图)   x=seq(-3,3,len=20); y=dnorm(x)#产生数据 w=data.frame(x,y) #合并x和y,生成w par(mfcol=c(2,2)) #准备画4个图的地方 plot(y~x,w,main="正态密度函数") plot(y~x,w,type="l",main="正态密度函数") plot(y~x,w,type="o",main="正态密度函数") plot(y~x,w,type="b",main="正态密度函数") par(mfcol=c(1,1))#取消par(mfcol=c(2,2))     实践二十一(色彩和符号等调节)   plot(1,1,xlim=c(1,7.5),ylim=c(0,5),type="n")#画出框架 #在plot命令后面追加点(如要追加线可用lines函数) points(1:7,rep(4.5,7),cex=seq(1,4,l=7),col=1:7,pch=0.6)  text(1:7,rep(3.5,7),labels=paste(0:6,letters[1:7]),cex=seq(1,4,l=7),col=1:7) #在指定位置加文字 points(1:7,rep(2,7),pch=(0:6)+7)#点出符号7到13 text((1:7)+0.25,rep(2:7),paste((0:6)+7)) #加符号号码 points(1:7,rep(1:7),pch=(0:6)+14) #点出符号14到20 text((1:7)+0.25,rep(1:7),paste((0:6)+14))#加符号号码 这些关于符号形状,大小,颜色,以及其它画图选项的说明可用 “?par”查看

转载于:https://www.cnblogs.com/shujuxiong/p/11147290.html

相关资源:数据结构—成绩单生成器
最新回复(0)