R语言学习详解 下载本文

提取矩阵下标和元素

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)%*?ind(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= \ #每列各自减去列中位数

建立数据集两种方法(data frame)

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(\ #建立字符向量x

wag<-data.frame(weight,age=x) #构建数据集,变量数据长度不同时,会自动循环填充数据

x<-1:4; y<-2:4 #建立数据向量x,y

data.frame(x,y) #若变量长度不是一个周期,则出现错误 2、从外部数据文件读取

foo<-read.table(file=\

适用于数据集的函数:

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(\等价于上述命令Puromycin[c(1,3,5),c(1,3)] Puromycin[c(1,3,5),] #提取数据集的第1、3、5行观测值,所有列 Puromycin$conc #等价于Puromycin[,1],提取变量为conc的那列值

subset(Puromycin,state==\ #提取满足条件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(\ #建立数据集 1、 保存为简单的文本文件

write.table(d,file= \ #这里quote表示变量名不放入双引号中

2、 保存为csv格式的文本文件

write.csv(d,file= \3、 保存为R格式文件

save(d,file= \保存工作空间映像

save.image() #等价于下式

save(list=ls(all=TRUE),file=\

数据的读取

1、 使用函数read.table()

setwd(\ #设置程序自动访问目录

HousePrice<-read.table(file=\2、 使用函数scan()

函数scan()比read.table()更灵活,可以指定变量的类型。另外,scan()可以创建不同的对象:向量、矩阵、数据集、列表等。

mydata<-scan(\3、 使用函数read.fwf()

读取指定宽度格式的数据

mydata<-read.fwf(\4、 读取Excel数据

1) 从剪贴板读入数据。先将Excel的文件中的数据部分选择复制到剪贴板(ctrl+c),然

后用R读入

mydata<-read.delim(\2) 使用程序包RODBC

安装程序包RODBC 在R中,按步骤“程序包-安装程序包-选取CRAN镜像服务器(可选北京的)-RODBC”

library(RODBC) #加载程序包RODBC

z<-odbcConnectExcel(\ #打开Excel文件

foo<-sqlFetch(z,\ #选择Sheet1工作单数据读入foo close(z) #关闭Excel文件

R中数据集的读取

1) R的标准数据datasets

R自身包含了一个有100多个数据集的数据集包datasets,随着R一次性自动载入。 列出全部数据集 data()

用数据集名显示数据

Puromycin

2) 专用程序包中的数据集

读取其他已安装的专用程序包中的数据,可以使用package参数

data(package=\ #列出程序包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='Binomial distribution,n=20,p=0.2',xlab='k') 分布函数图

plot(k,pbinom(k,n,p),type='h',main='Binomial distribution,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='Binomial distribution,n=100,p=.9') #直方图

lines(density(x,bw=1),col='red',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=\length\at 72.5,77.5,...\ #画直方图

hist(totlngth,breaks=75+(0:5)*5,ylim=c(0,22),xlab=\length\at