提取矩阵下标和元素
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