R语言实战前三章学习计划

导论

example - 小实验

> age <- c(1, 3, 5, 2, 11, 9, 3, 9, 12, 3) #导入数据
> weight <- c(4.4, 5.3, 7.2, 5.2, 8.5, 7.3, 6.0, 10.4, 10.2, 6.1)
> mean(weight)                             #均值
> sd(weight)                               #方差
> cor(age, weight)                         #相关系数
> plot(age, weight)                        #作图

example - 安包命令

insatll.packages("ggplot2")    #下载包
update.packages("ggplot2")     #更新包

第一章

example - 基本的操作命令

> setwd("C:/myprojects/project1")     # 设置工作目录
> options( )    # 显示选项设置
> options(digits=3)    # 显示选项设置,其中的数字以小数点三位有效数字的形式显示
> x <- runif(20)    # 创建包含20个均匀分布的变量
> summary(x)    # 显示摘要
> hist(x)    # 绘制直方图
> q()    # 退出R程序
> source("F:/R语言/c2_r1.R")#加载文件
#可在当前会话中执行一个脚本;如果文件名中不包含路径,R将假设此脚本在当前工作目录
> sink(“filename”,append,split)
#将文本定向输出到文件filename中

example - 保存图片

在这里插入图片描述

#保存多张	
x<-runif(10)
y<-runif(10)
pdf("1.png")
hist(x)
plot(x,y)
dev.off()#两张图片都会保存到pdf里

第二章

view(a)#查看a,但不能编辑
fix(a)#可以编辑,若a是向量,则打开记事本

for example - 合并小练习

> a<-c(1,2)
> b<-c("a","b")
> c<-c(T,F)
#c除了是向量还是合并的命令
> c(a,b)
[1] "1" "2" "a" "b"
> c(a,c)
[1] 1 2 1 0
> c(b,c)
[1] "a"     "b"     "TRUE"  "FALSE"
#或者用cbind(a,b)和rbind(a,b)
> cbind(a,b)
     a   b  
[1,] "1" "a"
[2,] "2" "b"
> rbind(a,b)
  [,1] [,2]
a "1"  "2" 
b "a"  "b" 
#dataframe
> data.frame(a=c("Zhao","Qian","Sun","Li","Ma"),b=c(1,2,19,4,5),c=6: 10) 
     a  b  c
1 Zhao  1  6
2 Qian  2  7
3  Sun 19  8
4   Li  4  9
5   Ma  5 10

2.1. 向量

a <- c(1,2,5,6) 创建数值型向量 a,元素为:1,2,5,6 
b <- c("one", "two", "three") 创建字符型向量 b,元素为:one,two,three c <- c(TRUE, TRUE, FALSE) 创建逻辑型向量 c,元素为:真,真,假 “:”,如 2 * 1 : 5 返回 2 4 6 8 10 【补】在 R 中 _______ 的运算级别最高 a <- seq(1, 10, 2) 【补】生成从 1 开始,步长为 2,到 10 为止的向量 a 
b <- seq(10, 1, -1) 【补】生成从 10 开始,步长为-1,到 1 为止的向量 b c <- seq(1, by=2, length=10) 【补】生成从 1 开始,步长为 2,包含 10 个元素的向量 c d <- rep(c(1, 3), 3) 【补】用生成重复元素的函数生成向量 d: 1,3,1,3,1,3 
e <- rep(c(1,3), each=3) 【补】用生成重复元素的函数生成向量 e: 1,1,1,3,3,3 a[3] 提取向量 a 的第三个元素 a[c(2,4)] 提取向量 a 的第二个和第四个元素 
a[2:6] 提取向量 a 的第二个至第六个元素 a[a>2] 【补】提取向量 a 中大于 2 的元素 2

2.2. 矩阵

矩阵是二维数组,数组是多维的,但他俩很像,基本没什么区别。
mymatrix <- matrix(1:20, nrow=5, ncol=4,  #以 1 至 20 的整数为元素,创建 5 行 4 列的矩阵 mymatrix
 byrow=TRUE,                              #byrow矩阵默认是按列填充,这里T表示按行
dimnames=list(c("R1","R2","R3","R4","R5"), c("C1","C2","C3","C4"))                 
#list(cnames,rnames)

> mytrix
   C1 C2 C3 C4
R1  1  2  3  4
R2  5  6  7  8
R3  9 10 11 12
R4 13 14 15 16
R5 17 18 19 20
dim(x)#返回行列数
#dim转换矩阵和向量
> dim(x)<-c(3,3)
> view(x)
> x<-as.vector(m)#矩阵->向量

example - 练习

创造一个矩阵,提取部分行列和删除部分行列

> a<-matrix(1:15,3,5)
> a
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    4    7   10   13
[2,]    2    5    8   11   14
[3,]    3    6    9   12   15
> b<-matrix(,nrow=3,ncol=4)
> b
     [,1] [,2] [,3] [,4]
[1,]   NA   NA   NA   NA
[2,]   NA   NA   NA   NA
[3,]   NA   NA   NA   NA
> a[c(1:3),c(2:4)]            #加括号可以
     [,1] [,2] [,3]
[1,]    4    7   10
[2,]    5    8   11
[3,]    6    9   12
> a[1:3,2:4]                  #不加括号也可以
     [,1] [,2] [,3]
[1,]    4    7   10
[2,]    5    8   11
[3,]    6    9   12
> a[2:3,]                     #全部列 
     [,1] [,2] [,3] [,4] [,5]
[1,]    2    5    8   11   14
[2,]    3    6    9   12   15
> a[1:2,c(1,3,4,5)]           #一部分加括号也可以
     [,1] [,2] [,3] [,4]
[1,]    1    7   10   13
[2,]    2    8   11   14
> a[-3,-2]
     [,1] [,2] [,3] [,4]
[1,]    1    7   10   13
[2,]    2    8   11   14

example - 矩阵练习

让矩阵变成向量,向量变成矩阵:

myz<-matrix(1:9,3,3)
> myz
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> c(myz)
[1] 1 2 3 4 5 6 7 8 9
> myz
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> myz1<-c(myz)
> myz2<-matrix(myz1)
> myz2
      [,1]
 [1,]    1
 [2,]    2
 [3,]    3
 [4,]    4
 [5,]    5
 [6,]    6
 [7,]    7
 [8,]    8
 [9,]    9
> myz2<-matrix(myz1,3,3)
> myz2
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

2.3. 数组

array(数组里的数。数组各维度里数的个数。取名字)
dim1 <- c("A1", "A2")
dim2 <- c("B1", "B2", "B3") 
dim3 <- c("C1", "C2", "C3", "C4"
z <- array(1:24, c(2, 3, 4), dimnames=list(dim1, dim2, dim3)) 

example - 练习

A<-matrix(1:20,4,5)
D<-array(1:20,c(4,5))
#没什么区别吧
D1<-array(1:60,c(3,4,5))
D2<-c(1:60)
dim(D2)<-c(3,4,5)
c(D1[1,1,],D1[1,,1])
c(D1[2,2,],D1[2,,2])

2.4. 数据框

数据类型pattern;列-变量var;行-观测obs。

> patientdata<-data.frame(li=c(1,2,3),ke=c(3,2,1),yo=c(2,2,2))
> patientdata
  li ke yo
1  1  3  2
2  2  2  2
3  3  1  2
> patientdata[1:2]  #提取1-2列
  li ke
1  1  3
2  2  2
3  3  1
> patientdata[c("li","yo")] #提取叫li ,yo的列
  li yo
1  1  2
2  2  2
3  3  2
> new<-patientdata[which(patientdata$li>1),]  #提取li>1的观测
> new
  li ke yo
2  2  2  2
3  3  1  2

mydata<-data.frame(myz1,myz2,myz3)   #每一列对应一个变量,不同列的元素类型可以不一样

example - 小知识点

把所有35岁以下病人的状态改为excellent

patientID <- c(1, 2, 3, 4) 
age <- c(25, 34, 28, 52) 
diabetes <- c("Type1", "Type2", "Type1", "Type1") 
status <- c("Poor", "Improved", "Excellent", "Poor")
patientdata <- data.frame(patientID, age, diabetes,status) 
#do it
x<-which(patientdata$age<35)
patientdata$status[x]<-"excellent"
patientdata[c("age","status")]

2.4.1. 数据框的绑定

A.为了避免每次都用“数据集名$”来绑定数据集,可以使用attach( ),detach( ),with( )

	attach(mtcars)   #绑定数据集
	summary(mpg)     #对变量 mpg 做摘要总结;
	plot(mpg,disp)   #绘制 mpg 和 disp 的散点图; 
	detach(mtcars)   #解除绑定
B.   

	with(mtcars,{                          #绑定数据集 mtcars;
	nokeep <- summary(mpg)                 #对变量 mpg 做摘要总结,保存在 nokeep 中;
	keep <<- summary(mpg)                  #对变量 mpg 做摘要总结,保存在 keep 中,保证 keep 在 with( )结构之外的全局环境 ....中也能使用;
	})                                     #解除绑定

2.5. 因子

因子有点像是一种可以给数据定级的存储方式

> status<-c("Poor","Improved","Excellent","Poor") 
> status<-factor(status,order=TRUE,levels=c("Poor","Improved","Excellent"))
> status
[1] Poor      Improved  Excellent Poor     
Levels: Poor < Improved < Excellent

2.6. 列表

> g <- "My First List"
> h <- c(25, 26, 18, 39)
> j <- matrix(1:10, nrow = 5)
> k <- c("one", "two", "three") 
> > mylist <- list(title=g,ages=h,shuzu=j,str=k) 
> mylist
$`title`
[1] "My First List"

$ages
[1] 25 26 18 39

$shuzu
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

$str
[1] "one"   "two"   "three"

如果要访问第三分量:

> mylist[[3]]
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10
> mylist[["shuzu"]]
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10
> mylist$shuzu
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

访问三到四个变量:

> mylist[3:4]
$`shuzu`
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

$str
[1] "one"   "two"   "three"

如果要访问第三分量中的第三行元素:

> mylist$shuzu[3,]
[1] 3 8
> mylist$shuzu[3]
[1] 3
> mylist$shuzu[3,1]
[1] 3
> mylist$shuzu[3,2]
[1] 8

其余命令:

length(mylist) 【补】展现列表 mylist 分量的数目

names(mylist) 【补】展现列表 mylist 各分量名字

> length(mylist)
[1] 4
> names(mylist)
[1] "title" "ages"  "shuzu" "str"  
> x<-unlist(mylist)          #转化为一个文本
> x
          title           ages1           ages2           ages3           ages4          shuzu1          shuzu2 
"My First List"            "25"            "26"            "18"            "39"             "1"             "2" 
         shuzu3          shuzu4          shuzu5          shuzu6          shuzu7          shuzu8          shuzu9 
            "3"             "4"             "5"             "6"             "7"             "8"             "9" 
        shuzu10            str1            str2            str3 
           "10"           "one"           "two"         "three" 

2.6. 导入外部文件的数据(以csv为例)

> myzdata<-read.table("I:/compitition/round3/1.csv",header=TRUE,sep=",")
> View(myzdata)
> myz<-read.csv("I:/compitition/round3/1.csv",header=TRUE,sep=",")

第三章 绘制图形

dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
opar <- par(no.readonly = TRUE)       #复制一份当前图形参数设置的列表
par(lty = 2, pch = 17)                #将线条类型修改成虚线(2),将点符号修改成实心三角(17)
plot(dose, drugA, type = "b")         #绘制药物 A 的剂量(dose)和响应关系(drugA)的折线图,类型 为 b
par(opar)                             #还原图形参数设置

> plot(dose, drugA, type = "b", lty = 2, pch = 17, main = "good boy myz") #lty=line type  pch=point character
####### dev.new dev.next dev.set dev.off dev.prev

在这里插入图片描述

3.1. 初尝试 - example1

建议这个例子一行一行验证,

x11()  #打开绘图窗口  A
plot(1:10) # 绘制[1,10]的散点图 A
x11()   B
plot(rnorm(10)) #绘制正态分布图 B
dev.set(dev.prev()) #设置前一个窗口为当前绘图窗口 A
abline(0, 1) #绘制以原点为起始点、斜率为1的直线   A
dev.set(dev.next())  #设置下一个窗口为当前绘图窗口 B
abline(h = 0, v = 5,col = "red" ) #绘制一条y=0的灰色水平线,h水平,v垂直 B
dev.set(dev.prev())  #设置前一个窗口为当前绘图窗口 A
dev.off()  #关闭该图形设备 A
#此时留下了个B
dev.off()  #可以把B也关了
#下面是左A右B

在这里插入图片描述

3.1. 初尝试 - example2

drug <- data.frame (dose, drugA, drugB)
pdf("mygraph.pdf") 
attach(drug) #绑定数据框
plot(dose, drugA, main="Responseof drugAondose")
abline(lm(drugA~dose)) # 添加最优拟合曲线
# title("Responseof drugAondose" )#添加标题
detach(drug)  #解除绑定
dev.off()  #关闭图形设备

在这里插入图片描述

3.2. example - 小练习 - A

myzpar<-par(no.readonly = T)
myzdata1<-read.table("online shopping.txt",header=T)

attach(myzdata1)
opar<-par(no.readonly = TRUE)
par(pch=22,bg="grey",col="red")
plot(period, amount,main = "Figure.1",bg="blue")
#plot里的bg是控制符号的背景,比如这个空心方框里面是蓝色
#par里的bg是控制整个的背景,col控制了pch的颜色
#如果par里的pch不是空心的,就是另外的样子了
par(opar) 
detach(myzdata1)

在这里插入图片描述

然后改一下:

par(pch=15,bg="grey",col="red")     #par里的参数管所有的plot,plot只管这一个图
#pch是15,那么plot里的blue就没用了,可以理解为优先级
plot(period,amount,main = "Figure.1",bg="blue")

在这里插入图片描述

3.2. example - 小练习 - B

opar <- par(no.readonly = TRUE)
t<-seq(0,2*pi,by=0.1)
x<-16*sin(t)^3
y<-13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)
a<-(x-min(x))/(max(x)-min(x))
b<-(y-min(y))/(max(y)-min(y))
par(bg="pink")
plot(a,b,ann=FALSE,pch=16,axes=FALSE,col="red")
#ann移除默认的标题或标签
#axes禁用全部坐标轴,包括坐标轴框线
par(opar) #好丑...

在这里插入图片描述

3.2. example - 小练习 - C

x<-colors()  
#返回所有可用颜色的名称
x<-seq(-0.5*pi,0.5*pi,by=0.01)
y<-sin(4*x)^2
plot(t*y*cos(x),t*y*sin(x),pch=21,col="green",bg="gray",axes=FALSE,ann=F)
points((t*8/9)*y*cos(x),(t*8/9)*y*sin(x),pch=13,col=rgb(0.1,0.6,0.4))
points((t*2/3)*y*cos(x),(t*2/3)*y*sin(x),pch=13,col=rgb(0.9,0.3,0.4))
lines((t/2)*y*cos(x),(t/2)*y*sin(x),pch=12,col=rgb(0.2,0.4,0.7))
lines((t/3)*y*cos(x),(t/3)*y*sin(x), pch=11,col="yellowgreen")

在这里插入图片描述

3.3. example - 彩虹图 - A

par(mfrow=c(1,2))#行数为nrows、列数为ncols的图形矩
pie(rep(1,12), col = rainbow(12), main = "rainbow12")
pie(rep(1,1000), labels = "", col=rainbow(1000), 
    border = rainbow(1000), main = "rainbow1000")

在这里插入图片描述

3.3. example - 彩虹图 - B

我那个大小有问题,于是设置了两种方式调节大小,自己拆开吧
par(mfrow = c(2,2),mar = c(1,1,1,1))
pdf("mygraph.pdf")
layout(matrix(c(1, 2, 3, 4), 2, 2, byrow = TRUE), 
       widths = c(1, 1), heights = c(1, 1)) 
pie(rep(1,12), col = heat.colors(12), main = "heat")
pie(rep(1,12), col = terrain.colors(12), main = "terrain")
pie(rep(1,12), col = topo.colors(12), main = "topo")
pie(rep(1,12), col = cm.colors(12), main = "cm")
dev.off()

在这里插入图片描述

3.3. example - 灰度图

n <- 10 
mygrays <- gray(0:n/n) 
pie(rep(1, n), labels = mygrays, col = mygrays)

在这里插入图片描述

3.4. example - RColorBrewer - A

brewer.pal(n, name)
可以按照顺序提取出用户想要的颜色,n表示维度,name是类型(序列型Seq、离散型Div、分类型Qual)
display.brewer.all(type="qual")(type="seq")(type="div")

> rep(1,4)
[1] 1 1 1 1
library(RColorBrewer)
barplot(rep(1,7), col=brewer.pal(n,"Set2"))

在这里插入图片描述

3.4. example - RColorBrewer - B

#horiz=T  使其水平
#axes=F  去刻度
#border=F 去框
par(mfrow=c(1,5),mar=c(1,1,1,1))          #mar用数值向量设置边界,pin用英寸表示图形尺寸
n<-9
barplot(rep(1,n), col=brewer.pal(n,"Greys"), horiz=T, main="my greys",axes=F)
barplot(rep(1,n), col=brewer.pal(n,"PuRd"), horiz=T, main="my purd",axes=F)
barplot(rep(1,n), col=brewer.pal(n,"BuGn"), horiz=T, main="my bugn",axes=F)
barplot(rep(1,n), col=brewer.pal(n,"Oranges"), horiz=T, main="my oranges",axes=F)
barplot(rep(1,n), col=brewer.pal(n,"Blues"), horiz=T, main="my blues",axes=F)

在这里插入图片描述

3.5. example - 文本属性(添加文本)

3.5.1. 字体font

#1
plot(1:7,c(0:6),col="blue",pch=19,xlab="index")
text(x=2, y=4, "font=1:正常字体",font=1)
text(x=3, y=3, "font=2:粗体字体",font=2)
text(x=4, y=2, "font=3:斜体字体",font=3)
text(x=5, y=1, "font=4:粗斜体字体",font=4)

在这里插入图片描述

3.5.1. 字体族

windowsfonts创建字体族

family调用创建好的

2
plot(rnorm, lty=0, ann=F, axes=F)                  #ann取消坐标轴和标题文本
box(which="plot", lty = '1371', col="gray")        #box绘制边框, (虚线)lty = 2
windowsFonts(A=windowsFont("楷体"),                #楷体
             B=windowsFont("隶书"),                #隶书
             C=windowsFont("华文新魏"),             #华文新魏
             D=windowsFont("微软雅黑"),             #微软雅黑
             E=windowsFont("幼圆")                 #幼圆
             )
text(x=0.5, y=2, family="A", "画")
text(x=0.5, y=1, "远看山有色",family="B")
text(x=0.5, y=0, "近听水无声",family="C")
text(x=0.5, y=-1, "春去花还在",family="D")
text(x=0.5, y=-2, "人来鸟不惊",family="E")

在这里插入图片描述

3.5. example - A

plot(dose, drugA, type = "b",  
     col = "red",  
     lty = 2, pch = 2, lwd = 2,  
     main = "Clinical Trials for Drug A
     ",  
     sub = "This is hypothetical data",   #副标题
     xlab = "Dosage",  
     ylab = "Drug Response",  
     xlim = c(0, 60),  
     ylim = c(0, 70)) 

3.5. example - B

x <- c(1:10)
y <- x
z <- 10/x
x2<-c(2,4,6,8,10)
opar <- par(no.readonly=TRUE)
par(mar=c(5, 4, 4, 8) + 0.1)
plot(x, y, type="b",pch=21, col="red",yaxt="n", lty=3, ann=FALSE)
lines(x, z, type="b", pch=22, col="blue", lty=2)
axis(2, at=x, labels=x, col.axis="red", las=2)
axis(3, at=x2, labels=x2, col.axis="green")
axis(4, at=z, labels=round(z, digits=2),col.axis="blue", las=2, cex.axis=0.7, tck=-.01)
mtext("y=1/x", side=4, line=3, cex.lab=1, las=2, col="blue")
mtext("Top X Axies", side=3, line=3, cex.lab=1, las=0, col="green")
title("An Example of Creative Axes",sub="Three Axies", xlab="X values",ylab="Y=X")
par(opar)

在这里插入图片描述

3.5. example - C

myzpar<-par(no.readonly = T)
t = seq(0, 2*pi, by = 0.01)
x = 0.9*sin(t)
y = 0.9*cos(t)
par(mar = c(3,3,3,3))#pin = c(3,3)
plot(x, y, col = "red", type = "l", lwd = 2)
lines(x/2, y/2, col = "red", type = "l", lwd = 8)
lines(x*4/5, y*4/5, col = "red", type = "l", lwd = 4)
abline(h = 0, v = 0)
text(-0.9, 0, "1")
text(0.9, 0, "1")
text(-0.7, 0, "2")
text(0.7, 0, "2")
text(-0.4, 0, "3")
text(0.4, 0, "3")
axis(1, c(-0.5, 0.0, 0.5))
axis(2, c(-0.5, 0.0, 0.5))
legend("topright", c("outer", "middle", "inner"),lty = c(1,1,1), 
       col = c("red", "red", "red"), lwd = c(2, 2, 4))
par(myzpar)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41661059/article/details/106902282