R语言学习详解.docx
- 文档编号:6029888
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:24
- 大小:164.24KB
R语言学习详解.docx
《R语言学习详解.docx》由会员分享,可在线阅读,更多相关《R语言学习详解.docx(24页珍藏版)》请在冰豆网上搜索。
R语言学习详解
给出数据集mtcars的基本信息。
?
mtcars#显示数据集mtcars的详细信息
Mtcars#显示数据集mtcars的全部32个观测值
head(mtcars)#显示数据集mtcars中前6个观测值
tail(mtcars)#显示数据集mtcars中后6个观测值
names(mtcars)#显示数据集mtcars中的变量
data.entry(mtcars)#浏览和修改mtcars数据集
浏览和修改mtcars数据集
mtcars<-edit(mtcars)#修改数据后,存入同名数据集
MTcars<-edit(mtcars)#修改数据后,存入新数据集
xnew<-edit(data.frame())#编辑生成新的数据集xnew
比较下列命令区别:
x<-c(10.4,5.6,3.1,6.4,21.7)#建立数据向量
1、data.entry(x)#打开数据编辑器修改数据
2、edit(x)#打开R编辑器修改数据
直接修改mtcars(两个命令相同)
fix(mtcars)
mtcars<-edit(mtcars)
attach(mtcars)#激活mtcars,
mpg#激活后,可直接用数据集的变量名
属性变量
table(cyl)#cyl是属性变量,计算其频数表
barplot(table(cyl))#频数直方图(对属性变量的)
数值变量
stem(mpg)#茎叶图
hist(mpg)#直方图
boxplot(mpg)#盒形图
mean(mpg)#均值
mean(mpg,trim=0.1)#截取上下各10%数据后遗留数的均值
tapply(mpg,cyl,mean)#按分组变量cyl计算mpg的分组均值,如果将mean替换成其他统计量,就可以计算其它各种分组统计量
IQR(mpg)#计算四分位差(函数大写)Q3-Q1
quantile(mpg)#计算四分位点,标明各分位点的位置
fivenum(mpg)#计算四分位点,不标明各分位点的位置
quantile(mpg,probs)#计算按向量prob给定的各百分位的样本值
probs=c(0.1,0.5,99.5/100)#给出各百分位
quantile(mpg,probs)#计算相应的样本值
summary(mpg)#描述性统计
sd(mpg)#标准差
var(mpg)#方差
skewness(mpg)#偏度
kurtosis(mpg)#峰度
散点图
plot(cyl,mpg)#气缸数与油耗的散点图
plot(hp,mpg)#马力与油耗的散点图
不同气缸数下的散点图
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的指定对象
ls(pat="^m")#显示内存中打头字为m的指定对象
ls.str()#显示内存中所有对象的详细信息
rm(x,y)#从内存中删除对象x与y
rm(list=ls())#从内存中删除所有对象
rm(list=ls(pat="^m"))#从内存中删除所有打头字为m的指定对象
建立数值型向量
向量具有简单规律
seq()或”:
”
1:
10#建立1到10的数字向量
1:
10-1#建立0到9的数字向量
1:
(10-1)#建立1到9的数字向量
z<-seq(1,5,by=0.5)#从1到5,每次递增0.5
z<-seq(from=1,to=5,by=0.5)#等价于z<-seq(1,5,by=0.5)
z<-seq(1,10,length=11)#从1到10,等分为11个点
z<-seq(1,10,length.out=11)#等价于z<-seq(1,10,length=11)
向量具有复杂规律
z<-rep(2:
5,2)#2到5循环2次
z<-rep(2:
5,times=2)#等价于z<-rep(2:
5,2)
z<-rep(2:
5,rep(2,4))#等价于z<-rep(2:
5,2)
z<-rep(1:
3,times=4,each=2)#数字1到3每个重复2次,共循环4次
向量没有规律
z<-rep(c(3,5),c(2,4))#3按后面2循环2次,5按后面4循环4次
通过键盘逐个输入
z<-scan()#直接输入数据,回车键输入数据,空数据表示停止输入
sequence(3:
5)#建立连着的数据,从1到3,1到4,再1到5
sequence(c(10,5))#建立连着的数据,从1到10,再从1到5
建立逻辑向量
x<-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","green","yellow")
a<-factor(a)
数值型向量转换为因子
b<-c(1,2,3,1)
b<-factor(b)
字符型因子转换为数值型因子
a<-c("green","blue","green","yellow")
a<-factor(a)
levels(a)<-c(1,2,3,4)
参考类似
b<-factor(c("A","B","C"),labels=c(1,2,3))
数值型因子转换为字符型因子
b<-c(1,2,3,1)
b<-factor(b)
levels(b)<-c("low","middle","high")
参考
ff<-factor(1:
3,labels=c("A","B","C"))
提取向量中的元素
x<-seq(1:
100)#建立1:
100的数据向量,存入x
x[1:
10]#提取x的前10个元素
x[c(1,4)]#提取x的第1和第4元素
y<-x[-(6:
10)]#去除向量中与索引向量对应的元素
提取逻辑向量
x<-c(42,7,64,9)#产生数值向量x
x>10#产生x>10是否成立的逻辑向量
x[x>10]#取x>10的值
x[x<40&x>10]#取x<40且x>10的值
x[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的元素的和
y<-x[!
is.na(x)]#求出x中的非缺失值放入向量y中
z<-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
具体例子
A<-array(1:
8,dim=c(2,2,2))#建立一个2x2x2的数组,里面放置1到8
dim(A)#求出A的维数
dimnames(A)<-list(c("a","b"),c("c","d"),c("e","f"))#定义数组中向量名
colnames(A)#A的列变量名
rownames(A)#A的行变量名
建立矩阵
A<-array(1:
6,c(2,3))#建立2行3列矩阵A,用1-6填入
A<-array(1:
4,c(2,3))#如果数据不够,自动循环
A<-array(1:
8,c(2,3))#建立A时,如数据多余,则自动截尾
标准矩阵命令
X<-matrix(1,nr=2,nc=2)#建立2x2标准矩阵
X<-diag(3)#建立3x3的单位阵
X<-diag(c(10,20,30))#建立以10,20,30为对角元素的对角阵
X<-diag(2.5,nr=3,nc=5)#建立3X5的广义对角阵
X<-matrix(1:
4,2)#建立2x2的矩阵,用1-4填入
X<-matrix(1:
4,2,2)#等价于X<-matrix(1:
4,2)
rownames(X)<-c("a","b")#定义行名
colnames(X)<-c("c","d")#定义列名
dim(X)#求出行列数
dimnames(X)#求出行列别名
X<-matrix(1:
4,2,4)#按列填入,不够再次循环
X<-matrix(1:
4,2,4,byrow=TRUE)#按行填入,不够再次循环
提取矩阵下标和元素
X<-matrix(1:
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
矩阵的运算
X<-matrix(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
X<-matrix(1:
4,2)#建立一个2x2的1到4的行列式
det(X)#X的行列式
cov(X)#求出X各列之间的协方差矩阵
x<-c(1,2)#设x
y<-c(3,4)#设y
cor(x,y)#相关系数矩阵
求均值、中位数
m<-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
x<-c("adult","team")#建立字符向量x
wag<-data.frame(weight,age=x)#构建数据集,变量数据长度不同时,会自动循环填充数据
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()函数
Puromycin$iconc<-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("A","B","A"),weight=c(2.3,NA,9))#建立数据集
1、保存为简单的文本文件
write.table(d,file="c:
/data/foo.txt",row.names=F,quote=F)#这里quote表示变量名不放入双引号中
2、保存为csv格式的文本文件
write.csv(d,file="c:
/data/foo.csv",row.names=F,quote=F)
3、保存为R格式文件
save(d,file="c:
/data/foo.Rdata")
保存工作空间映像
save.image()#等价于下式
save(list=ls(all=TRUE),file="c:
/data/.Rdata")
数据的读取
1、使用函数read.table()
setwd("c:
/data")#设置程序自动访问目录
HousePrice<-read.table(file="houses.dat",header=TRUE)
2、使用函数scan()
函数scan()比read.table()更灵活,可以指定变量的类型。
另外,scan()可以创建不同的对象:
向量、矩阵、数据集、列表等。
mydata<-scan("data.dat",what=list(Sex="",Weight=0,Height=0))
3、使用函数read.fwf()
读取指定宽度格式的数据
mydata<-read.fwf("data.txt",width=c(1,4,3),col.names=c("X","Y","Z"))
4、读取Excel数据
1)从剪贴板读入数据。
先将Excel的文件中的数据部分选择复制到剪贴板(ctrl+c),然后用R读入
mydata<-read.delim("clipboard")
2)使用程序包RODBC
安装程序包RODBC
在R中,按步骤“程序包-安装程序包-选取CRAN镜像服务器(可选北京的)-RODBC”
library(RODBC)#加载程序包RODBC
z<-odbcConnectExcel("c:
/data/body.xls")#打开Excel文件
foo<-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")#载入程序包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='h',main='Binomialdistribution,n=20,p=0.2',xlab='k')
标准正态分布
密度函数图
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='red',lwd=2,lty=1)
直方图
从二项分布B(100,0.9)中抽取容量为N=100000的样本,画直方图
N<-100000#建立随机数的容量
n<-100#建立二项分布的试验数
p<-0.9#建立每次成功的概率
x<-rbinom(N,n,p)#求出服从二项分布的随机数N个
hist(x,xlim=c(min(x),max(x)),probability=T,nclass=max(x)-min(x)+1,col='lightblue',main='Binomialdistribution,n=100,p=.9')#直方图
lines(density(x,bw=1),col='red',lwd=2)#核密度估计图
单总体描述性统计
1、直方图
library(DAAG)#载入程序包DAAG
data(possum)#载入数据集possum
fpossum<-possum[possum$sex=="f",]#选出性别为雌的负鼠数据放入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:
5)*5,ylim=c(0,22),xlab="totallength",main="B:
Breaksat75,80,...")#不同点位画直方图
2、茎叶图
stem(totlngth)
3、盒形图
boxplot(totlngth)
4、正态性检验
A)使用QQ图
qqnorm(totlngth,main="NormalityCheckviaQQPlot")#画QQ图
qqline(totlngth,col='red')#画正态线
B)与正态密度函数比较
#attach(fpossum)#加载数据集
dens<-density(totlngth)#将totlngth的基本统计量存入dens变量
xlim<-range(dens$x);ylim<-range(dens$y)#选取x和y的最大值
par(mfrow=c(1,2))#将作图空间分为两个,一行两列
hist(totlngth,breaks=72.5+(0:
5)*5,xlim=xlim,ylim=ylim,probability=T,xlab="totallength",main="A:
Breaksat72.5,77.5,...")#画直方图
lines(dens,col=par('fg'),lty=2)#画核密度函数
m<-mean(totlngth)#计算均值
s<-sd(totlngth)#计算标准差
curve(dnorm(x,m,s),col='red',add=T)#套用正态分布图
hist(totlngth,breaks=75+(0:
5)*5,xlim=xlim,ylim=ylim,probability=T,xlab="totallength",main="B:
Breaksat75,80,...")#画直方图
lines(dens,col=par('fg'),lty=2)#画核密度函数
curve(dnorm(x,m,s),col='red',add=T)#套用正态分布图
C)使用经验分布函数
x<-sort(totlngth)#对totlgnth进行排序,存入x
n<-leng
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学习 详解