R语言学习详解文档格式.docx
《R语言学习详解文档格式.docx》由会员分享,可在线阅读,更多相关《R语言学习详解文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
plot(hp,mpg,pch=cyl)#马力与油耗的散点图,pch表示用字符图案画点
legend(250,30,pch=c(4,6,8),legend=c("
4cylinders"
"
6cylinders"
8cylinders"
))#做出各气缸符号的说明标记。
这里250,30是说明框的左上角位置
线形回归
z<
-lm(cyl~mpg)#将回归所有结果放入z中
cor(cyl,mpg)#汽缸数与油耗的相关系数
cor(cyl,mpg)^2#一元回归Rsquare即为相关系数的平方
残差分析
lm.res<
-lm(cyl~mpg)#将回归所有结果放入lm.res中
lm.resids<
-resid(lm.res)#提取lm.res中的残差向量
plot(lm.resids)#画残差图
hist(lm.resids)#残差的直方图
qqnorm(lm.resids)#残差的qq图
qqline(lm.resids)#残差的qq线
结束分析并退出R
detach(mtcars)#从内存中清除数据集mtcars
q()#退出R
改变内存变量
name<
-"
Carmen"
;
n1<
-10;
n2<
-100;
m<
-0.5#定义内存变量
ls()#显示所有定义的内存对象
ls(pat="
m"
)#显示内存中含m的指定对象
^m"
)#显示内存中打头字为m的指定对象
ls.str()#显示内存中所有对象的详细信息
rm(x,y)#从内存中删除对象x与y
rm(list=ls())#从内存中删除所有对象
rm(list=ls(pat="
))#从内存中删除所有打头字为m的指定对象
建立数值型向量
向量具有简单规律
seq()或”:
”
1:
10#建立1到10的数字向量
10-1#建立0到9的数字向量
(10-1)#建立1到9的数字向量
-seq(1,5,by=0.5)#从1到5,每次递增0.5
-seq(from=1,to=5,by=0.5)#等价于z<
-seq(1,5,by=0.5)
-seq(1,10,length=11)#从1到10,等分为11个点
-seq(1,10,length.out=11)#等价于z<
-seq(1,10,length=11)
向量具有复杂规律
-rep(2:
5,2)#2到5循环2次
5,times=2)#等价于z<
5,2)
5,rep(2,4))#等价于z<
-rep(1:
3,times=4,each=2)#数字1到3每个重复2次,共循环4次
向量没有规律
-rep(c(3,5),c(2,4))#3按后面2循环2次,5按后面4循环4次
通过键盘逐个输入
-scan()#直接输入数据,回车键输入数据,空数据表示停止输入
sequence(3:
5)#建立连着的数据,从1到3,1到4,再1到5
sequence(c(10,5))#建立连着的数据,从1到10,再从1到5
建立逻辑向量
-c(10.4,5.6,3.1,6.4,21.7)#建立数值向量x
temp<
-x>
13#建立一个x是否满足大于13的逻辑向量
函数factor()的调用格式
factor(x,levels=sort(unique(x),na.last=TRUE),labels=levels,exclude=NA,ordered=is.ordered(x))
字符型向量转换为因子
a<
-c("
green"
blue"
yellow"
)
-factor(a)
数值型向量转换为因子
b<
-c(1,2,3,1)
-factor(b)
字符型因子转换为数值型因子
levels(a)<
-c(1,2,3,4)
参考类似
-factor(c("
A"
B"
C"
),labels=c(1,2,3))
数值型因子转换为字符型因子
levels(b)<
low"
middle"
high"
参考
ff<
-factor(1:
3,labels=c("
))
提取向量中的元素
-seq(1:
100)#建立1:
100的数据向量,存入x
x[1:
10]#提取x的前10个元素
x[c(1,4)]#提取x的第1和第4元素
y<
-x[-(6:
10)]#去除向量中与索引向量对应的元素
提取逻辑向量
-c(42,7,64,9)#产生数值向量x
x>
10#产生x>
10是否成立的逻辑向量
x[x>
10]#取x>
10的值
x[x<
40&
10]#取x<
40且x>
10]<
-10#修改x中所有满足条件的数据为10
y=runif(100,min=0,max=1)#产生0-1上的100个均匀分布的随机数
sum(y<
0.5)#求小于0.5的元素的个数
sum(y[y<
0.5])#求小于0.5的元素的和
-x[!
is.na(x)]#求出x中的非缺失值放入向量y中
-x[(!
is.na(x))&
(x>
0)]#求出x中的大于零的非缺失值放入向量z中
建立数组
array(data,dim,dimnames)
A<
-array(a,dim=c(3,4,2))#以a中数据建立维数为(3,4,2)的数组A
具体例子
-array(1:
8,dim=c(2,2,2))#建立一个2x2x2的数组,里面放置1到8
dim(A)#求出A的维数
dimnames(A)<
-list(c("
a"
b"
),c("
c"
d"
e"
f"
))#定义数组中向量名
colnames(A)#A的列变量名
rownames(A)#A的行变量名
建立矩阵
6,c(2,3))#建立2行3列矩阵A,用1-6填入
4,c(2,3))#如果数据不够,自动循环
8,c(2,3))#建立A时,如数据多余,则自动截尾
标准矩阵命令
X<
-matrix(1,nr=2,nc=2)#建立2x2标准矩阵
-diag(3)#建立3x3的单位阵
-diag(c(10,20,30))#建立以10,20,30为对角元素的对角阵
-diag(2.5,nr=3,nc=5)#建立3X5的广义对角阵
-matrix(1:
4,2)#建立2x2的矩阵,用1-4填入
4,2,2)#等价于X<
4,2)
rownames(X)<
)#定义行名
colnames(X)<
)#定义列名
dim(X)#求出行列数
dimnames(X)#求出行列别名
4,2,4)#按列填入,不够再次循环
4,2,4,byrow=TRUE)#按行填入,不够再次循环
提取矩阵下标和元素
6,2,3)#用1到6建立一个2x3的矩阵
X[2,2]#提取X的(2,2)位的一个元素
X[2,]#提取X的第二行
X[,2]#提取X的第二列(按最小行或列数显示)
X[,2,drop=FALSE]#提取X的第二列,按原样显示
X[,c(2,3)]#提取X的第二、三列
X[-1,]#去掉第一行
X[,-2]#去掉第二列
X[,3]<
-NA#将第三列设为缺失值
X[is.na(X)]<
-1#缺失值替换为1
矩阵的运算
6,2,3)#用1到6建立一个2x3的矩阵
t(X)#转置矩阵
diag(X)#对角向量
矩阵按行或列合并
m1<
-matrix(1,nr=2,nc=2)#建立一个2x2的全1矩阵
m2<
-matrix(2,nr=2,nc=2)#建立一个2x2的全2矩阵
rbind(m1,m2)#矩阵按行合并
cbind(m1,m2)#矩阵按列合并
矩阵运算
m2*m2#矩阵按单元乘积,也即点乘
rbind(m1,m2)%*%cbind(m1,m2)#矩阵乘积1
cbind(m1,m2)%*%rbind(m1,m2)#矩阵乘积2
4,2)#建立一个2x2的1到4的行列式
det(X)#X的行列式
cov(X)#求出X各列之间的协方差矩阵
-c(1,2)#设x
-c(3,4)#设y
cor(x,y)#相关系数矩阵
求均值、中位数
-matrix(rnorm(n=12),nrow=3)#建立一个3行的12个服从标准正态分布的随机数矩阵
apply(m,MARGIN=1,FUN=mean)#按行取均值
apply(m,MARGIN=2,FUN=mean)#按列取均值
scale(m,center=T,scale=T)#中心化随机变量
row.med<
-apply(m,MARGIN=1,FUN=median)#计算矩阵m每行的中位数
sweep(m,MARGIN=1,STATS=row.med,FUN="
)#每列各自减去列中位数
建立数据集两种方法(dataframe)
x=c(42,7,64,9)#建立数据向量x
y=1:
4#建立数据向量y
1、直接法
z.df=data.frame(INDEX=y,VALUE=x)#建立一个2列变量的数据集,放入z.df
weight<
-c(70.6,56.4,80,59.5)#建立数据向量weight
adult"
team"
)#建立字符向量x
wag<
-data.frame(weight,age=x)#构建数据集,变量数据长度不同时,会自动循环填充数据
-1:
4;
y<
-2:
4#建立数据向量x,y
data.frame(x,y)#若变量长度不是一个周期,则出现错误
2、从外部数据文件读取
foo<
-read.table(file="
c:
/data/foo.txt"
header=T)
适用于数据集的函数:
attach(Puromycin)#激活数据集
summary(Puromycin)#显示主要的描述性统计量
类似的统计计算函数max(),min(),median(),var(),sd(),sum(),cov(),cor()同样适合于数据集,意义相同。
pairs(Puromycin,panel=panel.smooth)#成对数据散点图
数据集下标与子集的提取:
Puromycin[1,1]#提取第一个变量第一个观测值
Puromycin[c(1,3,5),c(1,3)]#提取数据集的一个子集(第1、3、5行观测值,第1、3列变量)
Puromycin[c(1,3,5),c("
conc"
state"
)]#等价于上述命令Puromycin[c(1,3,5),c(1,3)]
Puromycin[c(1,3,5),]#提取数据集的第1、3、5行观测值,所有列
Puromycin$conc#等价于Puromycin[,1],提取变量为conc的那列值
subset(Puromycin,state=="
treated"
&
rate>
160)#提取满足条件state为treated,rate>
16的子集
数据集中添加新变量的三种方法:
若想增加新变量iconc=1/conc:
1、基本方法
Puromycin$iconc<
-1/Puromycin$conc
2、使用with()函数
-with(Puromycin,1/conc)
3、使用transform()函数,可一次定义多个变量
Puromycin<
-transform(Puromycin,iconc=1/conc,sqrtconc=sqrt(conc))
head(Puromycin)#显示头6行数据
列表的建立:
复杂数据分析需要生成包含不同类型的对象。
R的列表可以做到
L1<
-list(1:
6,matrix(1:
4,nrow=2))#建立向量和矩阵的混合列表
L2<
-list(x=1:
6,y=matrix(1:
4,nrow=2))#建立向量和矩阵的混合列表,并各自赋名
L2$x#显示L2中的x变量
数据的存储
d<
-data.frame(obs=c(1,2,3),treat=c("
"
),weight=c(2.3,NA,9))#建立数据集
1、保存为简单的文本文件
write.table(d,file="
row.names=F,quote=F)#这里quote表示变量名不放入双引号中
2、保存为csv格式的文本文件
write.csv(d,file="
/data/foo.csv"
row.names=F,quote=F)
3、保存为R格式文件
save(d,file="
/data/foo.Rdata"
保存工作空间映像
save.image()#等价于下式
save(list=ls(all=TRUE),file="
/data/.Rdata"
数据的读取
1、使用函数read.table()
setwd("
/data"
)#设置程序自动访问目录
HousePrice<
houses.dat"
header=TRUE)
2、使用函数scan()
函数scan()比read.table()更灵活,可以指定变量的类型。
另外,scan()可以创建不同的对象:
向量、矩阵、数据集、列表等。
mydata<
-scan("
data.dat"
what=list(Sex="
"
Weight=0,Height=0))
3、使用函数read.fwf()
读取指定宽度格式的数据
-read.fwf("
data.txt"
width=c(1,4,3),col.names=c("
X"
Y"
Z"
4、读取Excel数据
1)从剪贴板读入数据。
先将Excel的文件中的数据部分选择复制到剪贴板(ctrl+c),然后用R读入
-read.delim("
clipboard"
2)使用程序包RODBC
安装程序包RODBC
在R中,按步骤“程序包-安装程序包-选取CRAN镜像服务器(可选北京的)-RODBC”
library(RODBC)#加载程序包RODBC
-odbcConnectExcel("
/data/body.xls"
)#打开Excel文件
-sqlFetch(z,"
Sheet1"
)#选择Sheet1工作单数据读入foo
close(z)#关闭Excel文件
R中数据集的读取
1)R的标准数据datasets
R自身包含了一个有100多个数据集的数据集包datasets,随着R一次性自动载入。
列出全部数据集
data()
用数据集名显示数据
Puromycin
2)专用程序包中的数据集
读取其他已安装的专用程序包中的数据,可以使用package参数
data(package="
pkname"
)#列出程序包pkname中的数据集,这里pkname只是一个已安装的程序包的代表
data(dataname,package="
)#载入程序包pkname中的数据集dataname
探索性数据分析
二项分布
n<
-20
p<
-0.2
k<
-seq(0,n)
概率函数图
plot(k,dbinom(k,n,p),type='
h'
main='
Binomialdistribution,n=20,p=0.2'
xlab='
k'
分布函数图
plot(k,pbinom(k,n,p),type='
标准正态分布
密度函数图
curve(dnorm(x,0,1),xlim=c(-5,5),ylim=c(0,0.3),col='
red'
lwd=2,lty=3)
curve(pnorm(x,0,1),xlim=c(-10,10),ylim=c(0,1),col='
lwd=2,lty=1)
直方图
从二项分布B(100,0.9)中抽取容量为N=100000的样本,画直方图
N<
-100000#建立随机数的容量
-100#建立二项分布的试验数
-0.9#建立每次成功的概率
-rbinom(N,n,p)#求出服从二项分布的随机数N个
hist(x,xlim=c(min(x),max(x)),probability=T,nclass=max(x)-min(x)+1,col='
lightblue'
Binomialdistribution,n=100,p=.9'
)#直方图
lines(density(x,bw=1),col='
lwd=2)#核密度估计图
单总体描述性统计
1、直方图
library(DAAG)#载入程序包DAAG
data(possum)#载入数据集possum
fpossum<
-possum[possum$sex=="
]#选出性别为雌的负鼠数据放入fpossum中
par(mfrow=c(1,2))#作图区域一分为二,一行两列
attach(fpossum)#加载数据集
hist(totlngth,breaks=72.5+(0:
5)*5,ylim=c(0,22),xlab="
totallength"
main="
A:
Breaksat72.5,77.5,..."
)#画直方图
hist(totlngth,breaks=75+(0:
B:
Breaksat75,80,..."
)#不同点位画直方图
2、茎叶图
stem(totlngth)
3、盒形图
boxplot(totlngth)
4、正态性检验
A)使用QQ图
qqnorm(totlngth,main="
NormalityCheckviaQQPlot"
)#画QQ图
qqline(totlngth,col='
)#画正态线
B)与正态密度函数比较
#attach(fpossum)#加载数据集
dens<
-density(totlngth)#将totlngth的基本统计量存入dens变量
xlim<
-range(dens$x);
ylim<
-range(dens$y)#选取x和y的最大值
par(mfrow=c(1,2))#将作图空间分为两个,一行两列
5)*5,xlim=xlim,ylim=ylim,probability=T,xlab="
)#画直方图
lines(dens,col=par('
fg'
),lty=2)#画核密度函数
-mean(totlngth)#计算均值
s<
-sd(totlngth)#计算标准差
curve(dnorm(x,m,s),col='
add=T)#套用正态分布图
),lty=2)#画核密度函数
C)使用经验分布函数
-sort(totlngth)#对totlgnth进行排序,存入x
-leng