一、R的基本概念和操作
1.1 R环境
2+3
1.2 常量
R中的常量基本分为四种类型:逻辑型、数值型、字符型和因子型。下面是生成因子的命令:
x"beijing","shanghai","beijing","beijing","shanghai")
yy
也可以写为:
y1,0,1,1,0)) #这里levels为因子水平,表示有哪些因子.c()为连接函数,把单个标量连成向量.
y
y==0 #有了变量名,首先可以将y与0进行比较
1.3 算术运算
算术运算是R中的基本运算,R默认的运算提示符是”>”,在后可以进行运算,下面先举几个例子:
(1)计算7*3,可执行如下命令:
7*3
(2)计算(7+2)*3可执行如下命令:
(7+2)*3
也可以调用R的内置函数,如:
(3)计算log(2)(12/3),可执行如下命令:
log(12/3,2)
1.4 赋值
给变量赋值用”=”或”x
y=1+x
y=4
二、向量的生成和基本操作
2.1 向量的生成
R中有三个非常有用的命令可以生成向量
1)c.
c是英文单词concatenate的缩写,是连接命令,基本运算如下:
a15,27,89)
a
b"cat","dog","fish")
b
2)seq.
seq是生成等差数列的命令,其语法结构如下所示:
seq(from,to,by,length,…),其中from表示序列起始的数据点,to表示序列的终点,by表示每次递增的步长,默认状态步长为1,length表示序列长度.如:
seq(1,10)
seq(100,0,-20)
seq(1,10)还可以用更简单的方式表示,比如:
1:10 #seq(1:10)即1:n表示从1到n间隔为1的数列
seq(0,1,0.05)
3)rep
rep是生成循环序列的命令,其语法结构如下所示:
rep(x,times)
其中x表示序列所循环的数或向量,times表示循环重复的次数.
例A.1
(1)生成由5个2组成的向量;
(2)将”1”,”a”依次重复3遍;
(3)生成依次由10个1,20个3和5个2组成的向量.
rep(2,5)
rep(c(1,"a"),3)
rep(c(1,3,2),c(10,20,5))
rep(c(1,4,6),length=5)
2.2 向量的基本操作
2.2.1向量a中第i个位置的元素表示
a=2:6
a[1]
a[length(a)]
a[6]
a[c(1,3,6)]
2.2.2在向量上插入新的数据
在向量a的第i个位置后插入新数据z的方法是:
c(a[1:i-1],z,a[i:length(a)])
下面在向量a的第三个位置插入数值9:
c(a[1:2],9,a[3:5])
2.2.3向量与向量的合并
将向量a与向量b合并为一个新的向量的方法是:
a2,3,4,5,6)
b35,40,58)
aba,b);ab #???
za,"good") #如果将非数值型向量和数值型向量合并,结果是所有数据类型被统一到R所默认的基本类型——字符型,此时如果对a进行数值运算会发生错误.
z
2.2.4在向量中删除数据
a[-i]表示删除向量a的第i个元素,如:
a=2:6
a
aa[-2]
a #删除一串数用rmarkdown不会
2.2.5更新向量中的数据
将a向量中的第5个位置改为22的程序如下:
a=2:6
a[5]22
a
2.2.6把向量逆向排序
b=1:b
rev(b)
2.2.7对向量排列
b=c(2,9,2,6,5)
sort(b)
2.2.8去掉缺失值
d=c(3,9,2,NA,6,5)
na.omit(d)
例题A.2 (非参P304)
score=c(90,0,78,63,84,36,NA,84,58,80,75,85,72,78,86)
grade=c(3,3,3,4,3,3,3,3,3,3,4,3,4,4)
#(1)
length(score)
#(2)
z=na.omit(score);length(z)
#(3)
score[7]=80
#(4)
score3=score[grade==3]
score4=score[grade==4]
#(5)
h=rev(sort(score3));h
z=rev(sort(score4));z
#(6)
task1=c(h,z);task1
2.3 向量的运算
2.3.1标量和向量的运算:
x=c(1,2,5)
2*x
10+x
2.3.2向量和向量的运算:
x=c(1,2,5)
y=c(10,11,12)
x+y
max(x) #最大值
mean(x) #"mean":均值
2.4 向量的逻辑运算
向量也可取逻辑值TURE和FALSE,可用来比较是非结果.如:
5>6
x=49/7
x==7 #"=="相等
求向量x中大于1小于5的元素:
x=c(1,2,5)
x[x>1&x<5]
三、高级数据结构
3.1 矩阵的操作和运算
3.1.1定义矩阵
定义矩阵的语法是:
matrix(data,nrow,ncol,[byrow=F])
例A.3 把向量序列c(1,2,3,4,5,6)转换为3*2的矩阵:
x=1:6
x.matrix=matrix(x,nrow=3,ncol=2,byrow=T)
x.matrix
#给矩阵赋予列名:
dimnames(x.matrix)=list(NULL,c("a","b"))
x.matrix
3.1.2矩阵元素和行、列的选取
矩阵a中第i行第j列位置的元素表示为a[i,j].比如:
x=1:6
x.matrix=matrix(x,nrow=3,ncol=2,byrow=T)
x.matrix[1,2]
x.matrix[,2] #"a[,j]"选取a中第j列
3.1.3矩阵的运算
a=matrix(c(1,2,3,4),2)
b=matrix(c(3,1,5,2),2)
2*a
a+b
t(a) #a的转置
solve(a,b) #求"ax=b"的解"x"
apply函数可以对指定矩阵的行、列应用R中所有用于向量计算的函数,它的语法是:
apply(data,dim,function,…)
data表示待处理矩阵或数组的名称;dim表示指定的维,1表示行,2表示列;”…”表示所用函数参数的设定.如,计算a的列最大值:
a=matrix(c(1,2,3,4),2)
apply(a,2,max)
3.1.4矩阵的合并
增加若干列用cbind函数,增加若干行用rbind函数.如:
x=1:6
x.matrix=matrix(x,nrow=3,ncol=2,byrow=F)
add=c(5,6)
cbind(a,add)
rbind(a,add)
3.2 数组
矩阵是二维向量,数组则是多维矩阵,数组的语法为:
array(data,dimnames)
a1:24,c(3,4,2))
a #"a[,,1]"表示取出第一维矩阵
3.3 数据框
定义一个数据框:
a=matrix(c(1,2,3,4),2)
t=c("good","good")
new.a=data.frame(a,t)
new.a
attach()命令将所需处理的数据绑定.attach用法如下(解除绑定用”detach()”函数命令):
a=matrix(c(1,2,3,4),2)
t=c("good","good")
new.a=data.frame(a,t)
attach(new.a)
t
X1
3.4 列表
列表是比数据框更为松散的数据结构,列表可以将不同类型、不同长度的数据打包,而数据框则要求被插入的数据长度和原来的长度一致.比如:
a=matrix(c(1,2,3,4),2)
t=c("good","good")
list(a,t)
四、数据处理
4.1 保存数据
4.2 读入数据
4.3 数据转换
a=factor(c(1,3,5));levels=c(1,3,5)
a
as.numeric(a)
a1=as.character(a)
a2=as.numeric(a1)
a2
五、编写程序
5.1 循环和控制写
1)控制结构
x=1
if(x==1){print("x is ture")}else{print("x is false")}
2)循环结构
total=0
for(i in 1:100){total=total+i}
total
5.2 函数
f1=function(x){x^2+sin(x)}
f1(10)
f1(1:9)
f2=function(x,y){x^2;x+y;x^2+y}
f2(2,2)
f3=function(x,y){return(x^2);x+y;x^2+y}
f3(3,3)
六、基本统计计算
6.1 抽样
sample(1:10,10)
x=sample(1:10,10,replace=T)
x
unique(x)
sample(c(0,1),10,replace=T,c(1/4,3/4))
6.2 统计分布
dnorm(0,0,1)
x=seq(-2,2,1)
dnorm(x,0,1)
pnorm(0,0,1)
qnorm(0.5,0,1)
rnorm(10,0,1)
七、R的图形功能
7.1 plot函数
x=seq(0,10,0.5)
y=2*sin(0.2*x)+log(x^2+3*x+1)
plot(x,y,xlab="X Is Across",ylab="Y Is Up")
points(x^0.5,y,pch=3)
points(x,8-0.7*y,pch="m") #use a "m" symbol
lines(x,y,lwd=2)
title("Titles are Tops")
7.2 多图显示
par(mfrow=c(2,2))
x=rnorm(100,2,3)
y=7:1
pie(y,col=rainbow(7),radius=1)
hist(x,col=5)
boxplot(x)
barplot(c(1,2,3))
by Rain-32