1.seq()等间隔函数
seq(from,to,by,length.out,along.with)
from,to 为数值,表示开始和结束
by为数值,表示间隔
length.out为数值,表示数列长度
along.with为向量,表示数列长度与该向量长度相等
seq(from=0,to=1,by=0.1)
seq(from=0,to=1,length.out = 11) #表示数列长度
seq(10)
seq(0,1,along.with = c(1,2,3,4,5)) #产生数列长度与c向量长度相等的向量
2.rep()重复函数
rep(x,times,length.out,each,正整数向量)
x为数量、向量、数据对象
times ,x重复的次数
length.out,重复后该向量的长度
each,x中每个分量重复的次数
正整数向量,x中分量对象重复的次数
rep(1,times=2)
rep(c(1,2,3),times=3)
rep(c(1,2),length.out=5)
rep(c(1,2,3,4),each=2)
rep(1:4,c(1,2,3,4))
rep(1:4,c(1,2,3,4,5)) #error
3.paste() “粘贴”多个对象
paste(……,sep=“ ”,collapse=NULL)
……为一个或多个对象,sep为分隔符
paste("Happy","birthday")
paste("Happy","birthday",sep=",")
paste("信管2016",1:4,sep="-")
paste(c("x","y"),rep(c(1,2),each=2))
x<-c(1,2,3,4,5)
y<-c("a","b","c","d","e")
paste(x,y)
paste(x,y,sep="-")
paste(x,y,sep="-",collapse=",")
4.factor() 将一个向量转换成因子
factor(x,levels,labels=levels,exclude=NA,ordered=is.ordered(x))
data<-c(1,2,3,3,1,2,2,3,1,3,2,1) #数值向量
fdata1<-factor(data);fdata1
fdata2<-factor(data,levels=c(1,2,3),labels=c("优","良","差"),order=TRUE);fdata2
fdata3<-factor(data,levels=c(1,2,3),labels=c("差","良","优"),order=TRUE);fdata3fdata<-factor(data,levels=c("优","良","差"))
fdata<-factor(data,levels=c(1,2,3))
#注意区别,levles:因子水平,labels:各水平的名字
5.tapply() 不同水平下指定函数的计算
tapply(x,index,fun,simplify=TRUE)
x:计算对象,向量
index:与x长度相同,表示x的因子水平
fun:需要计算的函数
simplify:返回值类型,T表示数组,F为列表
value <- c(87,58,93,88,63,76,89)
gender <- c("男","男","女","男","女","女","男")
# 按gende计算mean
tapply(value, gender, mean)# 练习:统计男女平均成绩
score<-c(87,58,93,88,63,76,89) #成绩
gender <- c("男","男","女","男","女","女","男")
tapply(score,gender,mean)class <- c("一班","一班","一班","一班","一班","一班","一班",
"二班","二班","二班","二班","二班","二班","二班")
score<-c(87,58,93,88,63,76,89,77,65,90,67,45,89,98) #成绩
gender <- c("男","男","女","男","女","女","男","男","男","女","男","女","女","男")
tapply(score,list(gender,class),mean)
6.table() 统计因子向量中各水平出现的频数
table(fdata)
grade<-c("优","良","差","差","优","良","良","差","优","差","良") #字符向量
fgrade<-factor(grade)table(fgrade)
7.matrix 矩阵的生成
matrix(data,nrow, ncol, byrow, dimnames)
data:数据向量
nrow:矩阵的行数
ncol: 矩阵的列数
byrow:逻辑值,T表示行序为主序,F表示列序为主
dimnames:行、列名称,列表格式
####生成矩阵的2种方法
####matrix
mdat<-matrix(c(1,2,3,4,5,6,7,8,9,0),nrow=2,
byrow=T,dimnames=list(c("row1","row2"),c("C1","C2","C3","C4","C5")))
# 求矩阵维数
dim(mdat)#将向量X以列序为主序设置为矩阵
x<-1:12;
dim(x)<-c(3,4)#将向量X以行序为主序设置为矩阵
mdat<-matrix(c(2,11,5,9,4,2,4,7,10,6,0,6),nrow = 3,byrow = T)
mdat
8.apply() 对矩阵或数组按照维度做运算
apply(x,margin,fun)
x:数组或矩阵
margin:做运算的维度,1表示行,2表示列
fun:运算函数
#apply()以数据帧或矩阵作为输入,并以向量、列表或数组的形式给出输出。
A<-matrix(1:20,nrow=4);A
sum(A);sum(A[,2])
apply(A,1,sum) #按行求和
apply(A,2,sum) #按列求和#apply对数组或矩阵运算
x<-1:20
dim(x)<-c(5,4)
apply(x,1,mean) #参数名省略
apply(x,MARGIN=1,FUN=mean) #参数名为大写英文字母
#lapply对列表或数据框运算,结果为列表
lapply(stu[,7:10],mean)
#sapply对列表或数据框运算,结果为向量、矩阵、数组
sapply(stu[,7:10],mean)
####plyr软件包
install.packages("plyr")
aaply(stu[,7:10],function(x) x*150/100)
9.data.frame函数 数据框的生成
df<-data.frame(
Name=c("Alice","Becka","James","Jeffrey"),
Sex=c("F","F","M","M"),
Age=c(13,13,12,13),
Height=c(56.5,65.3,57.3,62.5),
Weight=c(84,98,83,84))
as.data.frame将其他数据结构转换成数据框
lst<-as.data.frame(lst)
10.read.table() 读取表格形式的文件
read.table(file,header=True,sep=“”,row.names,col.names,skip,nrows)
file:读入数据文件名,数据以表格形式(纯文本文件)保存在文件中。
header:数据文件中有表头,则为T。
sep:数据分隔字符
row.names:行名
col.names:列名(变量名)
skip:读数据时跳过的行数,非负整数。
nrows:读取的行数
11.read.csv() 需要将Excel文件转换成CSV(逗号分隔)文件
read.csv(file,header)
12.library()
library(“pknames”)加载程序包
13.data
data() 查看数据集
data(dataname) 加载数据集
14.write() 保存文件
write(x,file,ncolumns,append)
x:需要写入文件的数据,通常为矩阵或向量
file:要保存的文件名
ncolumns:列数,字符默认1,数值默认5
append:逻辑变量,为T表示在原有文件添加数据,F表示新文件
write.csv()
将数据写为CSV格式文
15.rbind()和cbind() 列数或行数相同 合并矩阵或数据框
stu1<-read.csv("stu1.csv",header=T)
stu2<-read.csv("stu2.csv",header=T)
stu<-rbind(stu1,stu2)
16.cut() 输入为数值向量,输出为因子
cut(x,breaks,labels)
X:数值向量
breaks:指定分割点数量的整数,或指定位置向量
labels:输出因子的水平的标签
#cut()函数,将一个连续性变量切割成很多小片段
data<-round(runif(30,0,100))
data_cut<-cut(data,breaks=c(0,60,70,80,90,100))
table(data_cut)
17.subset()函数
subset(x,subset,select)
x:全部数据
subset:需要取出的子集
select:需要取出的列
stu[stu$性别=="女",] #取出所有女生的信息
subset(stu,性别=="女") #取出女生信息
subset(stu,性别=="女",高数) #取出女生高数成绩
18.sample()函数 随机抽样
sample(x,size,replace,prob)
x:目标数据
size:抽样数量的参数
replace:是否放回抽样,有放回为T,无放回F
prob:抽样的概率向量
sample直接作用数据框,得到对列的抽样结果。
实现按行抽样
#简单随机抽样
#base包中的sample(),使用前不需要加载包,默认加载
data_stu<-rbind(stu1,stu2)
sample(data_stu,size=2,replace=F) #直接作用数据框,得到列的抽样结果
sub1<-sample(nrow(data_stu),5,replace = F) #对行数抽样
getdata(data_stu,sub1)
19.strata() 按照某个分层因子,按照比例抽样
strata(data,stratanames,size,method,pik,description)
data:待抽样数据集
stratanames:分层所依据的变量名
size:各层要抽出的观测样本数,顺序与变量水平出现次序相同
method:srswor(无放回)\srswr(有放回)\pisson(泊松)\systematic(系统)
pik:各样本抽样概率
description:是否输出含有各层基本信息的结果
20.plot(x,y,type,……)
plot(x,y,type,lty,pch,……)
plot(x,y,type,lty,pch,cex,lwd……)
cex:指定符号大小,默认大小为1,设置值为默认值的倍数
lwd:设置线条宽度
lty:设置线条的格式
pch:设置点的格式
x,y:构成横坐标和纵坐标的对象
type:图形类型,具体取值如表所示
type | 绘点(默认值) |
l | 画线(line) |
b | 同时绘点和线,线不穿过点 |
c | 仅画参数“b”所示的线 |
o | 同时绘点和线,线穿过点 |
h | 绘出点到横轴的竖线 |
s | 绘出阶梯图(先横再纵) |
S | 绘出阶梯图(先纵再横) |
n | 空图,不绘任何图形 |
a<-c(16,20,27,40,60)
dose<-c(20,30,40,45,60)
plot(a,dose,type="b",lty=2,pch=15)
xlim,ylim:二维向量,x轴、y轴的范围
main:字符串,图形的标题
sub:字符串,图形的副标题
xlab:字符串,x轴的标签
ylab:字符串,y 轴的标签
plot(a,dose,type="b",lty=2,xlim=c(10,70),ylim=c(10,70),main="药物响应图",sub="2018年",xlab="药物A",ylab="剂量")
21.hist(x,breaks,freq,border,labels) 直方图
x:向量,直方图的数据
breaks:数值,向量或字符串,描述直方图的断点
freq:逻辑变量,T为频数,F为密度,默认为T
border:数字或字符串,外框的颜色
labels:逻辑变量,T表示标出频数或密度
height<-round(runif(100,150,165),2)
windows()
hist(height,col="blue",border="red",labels = T,breaks=11,ylim = c(0,100)) #频数图
# 当freq缺省时,当且仅当breaks是等距的,freq取True。
# 当freq=True时,纵轴是频数,当freq=False时,纵轴是密度
hist(height,col="blue",border="red",labels = T,breaks=c(150,155,160,165),
ylim = c(0,100),freq = T) #频数图
# angle:counter-clockwise
# density:shading lines
hist(height,col="blue",border="red",angle=15+30*1:9,main="身高直方图",
freq=F,density=20,breaks=9) #密度图
22.boxplot(x,formula,data,range,outline,col,horizontal)
x:向量、列表,数据框
formula:公式,形如y~grp,其中y为向量,grp为分组,常为因子
data:数据框,提供数据
range:数值,表示“触须”范围,默认值为1.5(最小值小于触须则标记为outlier)
outline:逻辑值,F表示不标明异常值点
horizontal:逻辑值,F表示绘制水平箱线图
x<-c(25,45,50,54,55,61,64,68,72,75,75,78,79,81,83,84,84,84,85,86,86,86,87,89,89,89,90,91,91,92,100)
# 分位数
# 中位数和平均值的区别
quantile(x);
fivenum(x);
summary(x);
boxplot(x,range=1)
y <- c(6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36)
write.csv(y,"abc.csv")
23.text(x,y,labels,pos,cex,col,font,……).添加文字或符号
x,y:数值向量,表示添加文字的坐标;
labels:数值或字符型向量,需要添加的文字或符号
adj:[0,1]区间的值,调整文字的位置
pos:数字,1,2,3,4分别表示原始位置的下、左、上、右位置,不能和adj参数同时使用;
font:不同字体,(1,2,3,4,5)
cex : 设置文字的大小
例:给最大值添加标注
# font: 设置文字的格式,1是默认值,就是普通的文字,2代表加粗,
# 3代表斜体,4代表加粗+斜体,5只有用来ADOBE的设备上时才有用
text(weight[max],height[max],labels = "weight",font = 4,pos=4)
text(weight[max],height[max],labels = "weight",font = 4,adj=0)
text(weight[max],height[max],labels = "weight",font = 4,adj=1)
24.expression() 数学符号或表达式
数学表达式使用expression表示,该函数可以出现在text()、mtext()、axis()、title()中,表达图像中的意义
x<-seq(from=-2*pi,to=2*pi,length=200)
y<-x/2-2*sin(x)
windows()
plot(x,y,lty=1,type="l",col="red",lwd=2)
text(locator(1),expression(y==x/2-2*sinx))plot(iris[iris$Species=="setosa",]$Petal.Length, iris[iris$Species=="setosa",]
$Petal.Width,type="p",pch=24,xlim = c(0,7),ylim=c(0,2.5),xlab="Petal Length",
ylab="Petal Width",col="red")
points(iris[iris$Species=="versicolor",3],iris[iris$Species=="versicolor",4],type = "p",pch=22,col="blue")
points(iris[iris$Species=="virginica",3],iris[iris$Species=="versicolor",4],type = "p",pch=25,col="green")
text(c(3,2.8,6),c(0.25,1.5,1.9),labels=names(table(iris$Species)),font=2,col=c(2,4,3))
25.abline(a,b,h,v,reg,coef,untf) 添加直线
a,b:数值,a表示截距,b表示斜率
h:数值或向量,表示水平直线
v:数值或向量,表示竖直直线
coef:二维向量,分别表示截距和斜率
a<-c(16,20,27,40,60)
b<-c(15,18,25,31,40)
dose<-c(20,30,40,45,60)
plot(a,dose,type="b",xaxt="n",ylab="用药剂量",xlab="用药种类")
lines(b,dose,type="b",lty=2)
legend(40,30,legend = c("A药物","B药物"),lty=c(1,2)) #线条类型应和原线一致
title(main="药物响应图",sub="两种药物",outer=F)plot(a,dose,type="b",xaxt="n")
lines(b,dose,type="b",lty=2)
legend(40,30,legend = c("A药物","B药物"),lty=c(1,2)) #线条类型应和原线一致
title(main="药物响应图",sub="两种药物",outer=F,line=0.8)#数值主标题位置
axis(side=1,at=c(20,30,40,50,60),
labels = c("月份","月份","月份","月份","月份"))#添加直线
abline(h = 20, col = "red")
abline(v = 30, col = "blue")
abline(a = 30 ,b = 1, col = "blue")
abline(coef = c(20, 1), col = "green")c(x0,y0) <- locator(1)
26.legend(x,y,legend,border,lty,lwd,pch,……)添加图例
x,y:数值,表示图例的位置坐标;
legend:字符串或表达式,表示图例的内容
lty,lwd:数字,图例中线的类型与宽度
pch:数字,图例中符号的类型
plot(a,dose,type="b",lty=1,pch=1)
lines(b,dose,type="b",lty=2,pch=2)
legend(30,30,legend = c("A药物","B药物"),lty=c(1,2),
horiz=F,border=T, bty = "n",text.font = 1,
pch=c(1,2),seg.len=5) #线条类型应和原线一致
27.添加边
axis(side,at,labels,tick,line,pos,……)
side:数字,描述添加哪些位置的边。1,2,3,4分别表示下,左,上,右;
at:向量,添加标记的位置;
labels:逻辑,T表示在标记位置添加at的值,F表示不添加
##Cars数据集,
plot(cars,axes=F)
# plot(cars,axes=T)
title(main = "Stopping Distance ersus Speed",outer = F)
axis(side=1,labels = T)#绘制x坐标轴
axis(side=1,at =c(6,19) ,labels = T)
axis(side=2,at =c(6,19) ,labels = F)##绘制y坐标轴
box(which = "plot",lty=2,lwd=2,col=2) #绘制边框
box(which = "figure",lty=2,lwd=2,col=2)
box(which = "inner",lty=2,lwd=2,col=2)
box(which = "outer",lty=2,lwd=2,col=2)
28.图形参数设置方法par()
(1)在绘图函数中设置参数
如:plot(dose,a,type=“b”,col=“red)
(2)通过par()函数设置:参数值将一直有效置。
par()不带参数将生成含有当前图形参数设置的列表;
par(no.readonly=T)生成可以修改参数列表。
如:
opar<-par(no.readonly=T)
par(lty=2,pch=17,col=“red”)
plot(dose,a,type=“b)
lines(dose,b,type=“b)
par(opar)
例:
x<-round(runif(100,30,50),1) ###随机产生100名学生的体重
par1<-par(no.readonly = T) ###设置参数
par(lty=4,pch=15,col="red")
plot(x) ###画散点图
qqnorm(x) ###QQ图
par(par1) ###回归初识参数
plot(x) ###绘制散点图作比较
par()函数和layout()函数实现多幅图形的组合
在par()函数中使用mfrow=c(nrows,ncols)创建图形矩阵
如:创建两行两列的四幅图
attach(mtcars)
opar<-par(no.readonly = T)
par(mfrow=c(2,2)) #设置2行2列的组合图
plot(wt,mpg,main="Scatterplot of wt vs.mpg") #车重与英里数的散点图
plot(wt,disp,main="Scatterplot of wt vs.disp") #车重与排量的散点图
hist(wt,main = "Histogram of wt") #车重的直方图
boxplot(wt,main="Boxplot of wt") #车重的箱线图
par(opar)
29.layout(mat)
mat为矩阵,指定要组合的多个图形的位置。
#layout
data(mtcars)
par(pin=c(3,2))
attach(mtcars)
layout(matrix(c(1,2,3,3),2,2,byrow=TRUE),widths=c(2,2),height=c(1,1))
layout.show(3)
##上述layout表示,首先按照2行2列来排布,1图和2图放在第一行,3图整个放在第二行。
##widths表示宽度按照3:1的比例来排列,height表示高度按照1:2的遍历来排列
hist(wt)
hist(mpg)
hist(disp)
#如果图形显示不全,则修改mar参数#layout.show(n):n为要显示的子图个数
m<-matrix(1:4,2,2);m #建立矩阵m,2列2行
layout(m,widths=c(1,3),heights=c(3,1)) #将当时装置按照m进行划分,宽度之比为1:3,高度之比为3:1
layout.show(4)
30.which()
判断分量中谁为T
31.names()命名函数
fruit<-c(5,10,8,11)
names(fruit)<-c("orange","banana","apple","peach")
rownames() 求矩阵行名,或为其命名
colnames() 求矩阵列名,或为其命名
mdat<-matrix(c(1,2,3,4,5,6,7,8,9,0),nrow=2,byrow=T)
rownames(mdat)<-c("row1","row2")
colnames(mdat)<-paste("C",1:5,sep="")
dimnames对各维命名
dimnames(x2)<-list(c("row1","row2","row3"),c("col1","col2","col3","col4"),c("z1","z2"))
32.均值 mean(x)
33.保留小数 round(x,digit)
digit 小数点后几位
34.有参数的函数 函数名<-function(){
……
返回值计算表达式 }
x<-10;y<-20 #x,y全局变量
f<-function(y) x+y #y为局部变量
f(10)
35.install.packages()
install.packages() 打开安装包目录
install.packages(“包名”) 安装一个包
install.packages(“RODBC”)
36.str()函数
一般用于检查数据框当中有哪些数据
str(Insurance) #查看数据集的详细情况
37.getdata()
getdata(data, m)
install.packages("sampling")
library(sampling)
sample(x,size,replace,prob)
x:目标数据
size:抽样数量的参数
replace:是否放回抽样,有放回为T,无放回F
prob:抽样的概率向量
sample直接作用数据框,得到对列的抽样结果。 实现按行抽样
sub1<-sample(nrow(data_stu),5,replace = F)
getdata(data_stu,sub1)
38.sweep() 归一化,标准化
m<-matrix(c(1:9),byrow=TRUE,nrow=3)
#第一行都加1,第二行都加4,第三行都加7
sweep(m, 1, c(1,4,7), "+")