R语言复习
start at 2022/11/22?

明天要考试了,现在来梳理一下这学期学的R语言吧

数据类型

  • 整数
  • 小数
  • 字符串 双引号和单引号一样
  • 布尔类
    • T,TRUE
    • F,FALSE

数据类型转换

判断类型

#判断是否是数字 (整数+浮点数)
is.numeric(x)
is.character(x)
is.logical(x)
class(x)

类型转换

as.numeric(x)
as.character(x)
as.logical(x)

运算符号

符号 用法
加法 a + b
减法 a - b
乘法 a * b
除法 a / b
整除 a %/% b
取模 a %% b
次方 a ^ 2
不等 a != b
a & b
a | b
! b
四舍五入 round()
取上整 ceiling()
取下整 floor()

数据集

向量

应该是R语言最常用的数据结构了

同一个向量里,所有的数据类型都要一致

赋值

vec<-c(1,2,3,4)

取值

vec[3]
# 3

取长度

length(vec)

取出多个

用另一个向量取出来

vec[c(1,3,4)]
# 1 3 4

快速获得一个连续的向量

vec<-1:20
# 等价于
vec<-c(1,2,3,4 ... 19,20)

vec<-seq(1,50,2)
# 等价于
vec<-c(1,3,5,7 ... 47,49)

向量运算

向量运算是一一对应的运算,两个向量的长度要一样,或者是整数倍的关系(这样短的就能复制自己)

a<-c(1,2,3)
b<-c(4,5,6)
a + b
# c(1+4,2+5,3+6)
a * b
# c(1*4,2*5,3*6)
a + 2
# c(1*2,2*2,3*2)
rank(vec)
# 排名函数,升序,最小的是第1名

因子 factor

用于存储非定量的多分类数据(性别…)

目的是给这些没有大小、数值关系的数据排序

x<-c('中','优','良')
sort(x)
# 良 优 中 (用拼音来排序)
x1<-factor(x,levels=c('优','中','良'))
sort(x1)
# 优 中 良

列表 list

把多个向量放在一起,多个向量间可以数据类型不同,甚至不止能放向量,想放啥放啥

listSample<-list(Student=c('Tom','Kobe'),Year=2017,Score=c(60,50),school="CGU")

取数据

两种方法,一种是参数中的名字,另一种是用下标访问,下标要用两层括号

listSample$Student
listSampel[[1]]

矩阵 matrix

感觉不会考,稍微记一下

mx<-matrix(c(1:6),nrow=3,ncol=2)

mtrix

数据框 data.frame

感觉是重点考察对象

数据框是特殊的列表,要求所有向量的长度必须相等

x<-data.frame(A=c(1,2,3),B=c(1,2,3))
colnames(x)
# 列名 A B
rownames(x)
# 行名 1 2 3

取出

数据框更像是一张数据库的数据表,创建时的参数都是一个个字段,而不是一条条记录

dtfrme

data.frame[x,y]
# 第x行第y个字段
data.frame[y]
# 第y个字段,其实等价data.frame[,y]
data.frame[,y]
# 第y列
data.frame[x,]
# 第x行

字符串

正则表达式没什么好说的,知道^是开头,$是结尾就好了

nchar("hello") #取字符串长度
strsplit(xx,".") #类似python的"".split()
substr(xx,start,end) #指定起点和终点,不是长度
toupper(x)
tolower(x)
paste(xx,yy,sep=".") #拼接字符串
grep(regex,c(xx)) #返回向量中匹配的下标
grepl(regex,c(xx)) #返回一个参数向量等长的向量,表示是否匹配

语法

感觉解释型语言的语法都差不多,就是这个else必须在if的}同行让我有点反感

判断

if(cond1){
    xxx
} else if(cond2){
    # 必须同行!!!
    xxx
} else{
    # 必须同行!!!
    xxx
}
# 行if
ifelse(cond,A,B)
#等价于 cond?A:B

循环

for循环

和python很相似,然后用花括号包起来,感觉没有c系有含金量

for(x in c(xx)){
    xxx
}

while循环

while(cond){
    xxx
}

函数

R的函数感觉怪怪的,给一个变量赋值,把函数当成一个变量了,解释型语言都喜欢这么干吧

值得注意的是return必须带上括号,变量作用范围就不用说了,和其他语言都差不多

x<-function(){
    xxx
    return(xxx)
}

画图

感觉是重头戏

par

设置之后图形的参数,有些参数只能由par来改

参数列表

属性名 作用
bg 背景色
bty 变量样式(o,l,7,c,u)
cex 缩放倍数,子目标有, axis , lab , main , sub
col 颜色,子目标有, axis , lab , main , sub
font 字体样式,1正常,2粗体,3斜体,4粗斜体
family 字体种类
las 坐标轴数表样式
pch 点的形状,0正方形,1圆形,2三角形,3加号,4叉,5菱形
lty 线条type,0不画线,1实线,2虚线,3点线
lwd 线条witdh
str 旋转角度,45就是45度,逆时针
mfrow 多图 c(a,b),a * b

plot

设置坐标轴,参数是一堆坐标轴信息

参数列表

参数名 作用
type p点图,l折线图
main 主标题
sub 副标题
xlab x轴标题
ylab y轴标题
asp y/x的比
xlim,ylim x轴和y轴的界限,c(min,max)
col 颜色
cex 倍率
bg 背景色
frame.plot 是否给图像加框

points(x,y,…)

加点

abline(a,b,h,v,reg,…)

  • a,截距
  • b,斜率
  • h,水平线纵坐标
  • v,垂线横坐标
  • reg,不知道

segments(x0,y0,x1,y1)

线段

rect(xleft,ybottom,xright,ytop,…)

左下角,右上角 定位矩形

感觉不会考,不管了

text(x,y,”xxx”,…)

文本

mtext(“xxx”,side=3,…)

绘画框外绘制文本,side就选3吧

legend(x,y,legend,…)

图例

pie(x,…)

x是各个指标的百分比,然后指标的名字要自己names(x)<-c(A,B,C,…)

例题之类的

5.设置par,绘制一页多张图。
1)第一张图,不添加坐标轴
2)添加自定义坐标轴,横坐标为字母。
3)添加边框
4)添加第二张图,不添加坐标轴
5)添加自定义坐标轴,横坐标为字母,颜色为红色

op=par()
par(mfrow=c(1,2))
plot(1:10,type="l",xlab="", ylab="",axes=F)
axis(side=1,at=1:10,labels=LETTERS[1:10])
box()
plot(1:10,type="l",xlab="", ylab="",axes=F)
axis(side=1,at=1:10,labels=LETTERS[1:10],col.axis = "red")

3.绘制底图。要求
1)添加一个矩形
2)填充线密度设置为8根
3)填充线倾斜度设置为15度
4)灰色填充
5)矩形边框设置为红色
6)将矩形边框加粗
7)给整个图加一个粗度为3的外边框

plot(5,type="n")
rect(1,1, 3,3)
rect(3,3, 6,6,density = 8)
rect(3,3, 6,6,density = 8,angle = 15)
rect(1,7, 4,9,col="grey")
rect(1,7, 4,9, col="grey", border="red")
rect(1,7, 4,9, col="grey", border="red", lwd=3)
box(lwd=3)
  1. 随机产生10个数,对这个10数构成的向量进行绘画。要求:
    1)添加标签。x轴为“随机数横轴”,y轴为“随机数纵轴”,标题为“可视化练习”
    2)设置图标颜色为红色。
    3)更改图标类型为圆形
    4)更改图标大小为3倍大小
    5)更改类型为划线
    6)更改线条宽度为3倍
    7)更改线条类型为虚线
    8)限制y轴大小为0.3到0.8之间
    9)不画边框
data=runif(10)
plot(data,xlab="随机数横轴",ylab="随机数纵轴",main="可视化练习")
plot(data,col="red")
plot(data,col="red",pch=16)
plot(data,col="red",pch=16,cex=3)
plot(data,type="l")
plot(data,type="l",lty=4)
plot(data,type="l",lty=4,ylim=c(0.3,0.8),frame.plot="F")

dplr

需要library(tidyverse)

这个模块类似sql啊

filter筛选

筛选出一个子集,第一个参数是数据框,之后是表达式

filter(data,cond1,cond2)
# 条件1和条件2是与关系
filter(data,cond1|cond2)
# 这是或关系,不想管先后运算顺序就用括号吧

arrange重排

不选择行,而是改变行的顺序,按照关键字排序,默认是升序,用desc可以降序

select选择

这些dplr里的函数用法都差不多

第一个参数是数据集,之后的参数是要选择出来的列关键字,可以用冒号选连续,也可用减号去掉列

# 选择year到day中间的所有列
select(flights,year:day)
# 不选择year到day中间的列
select(flights,-(year:day))

stringr包

很多方法不是R语言自带的吗,为什么要再来一遍,只讲讲正则表达式吧

str_view(vector,regex)

这个和grep是反一下的,输入的向量参数是在前面的,grep是反过来的

然后这个结果是打开一个网页显示筛选结果,而不是在命令行里输出

x<-c("apple","banana","pear")
str_view(x,"an")

现在是考后复盘时间

完全没有考画图的知识点

全是一些基础数据结构的题目

向量负下标的作用

数据框增加列

最难的应该是字符频次统计,不会

应该是当时有关红楼梦的实验题,当时因为觉得正则表达式是重点,所以没仔细看

不考画图大概是画图都是纯记忆

后面还要写论文,那时候就要用到画图了

还要写论文,真麻烦啊

2022/11/22
> CLICK TO back <