R语言初学者指南学习摘要.docx
《R语言初学者指南学习摘要.docx》由会员分享,可在线阅读,更多相关《R语言初学者指南学习摘要.docx(19页珍藏版)》请在冰豆网上搜索。
R语言初学者指南学习摘要
R语言初学者指南
第1章引言
函数
功能
示例
?
访问帮助文件
?
boxplot
#
添加注释
#Addyourcommentshere
boxplot
生成盒形图
boxplot(y)boxplot(y~factor(x))
log
自然对数
log
(2)
log10
以10为底的对数
log10
(2)
library
载入包
library(MASS)
setwd
设置工作目录
setwd(“C:
/AnyDirectory”)
q
关闭R
q()
citation
提供对R的引用
citation()
第二章R中的数据输入
录入数据,并把数据系统地转化为标量(单值)、向量、矩阵、数据框或列表。
如何从Excel、ascii文件、数据库和其他统计程序中载入数据。
2.1R中的第1步
2.1.1小型数据库中的数据录入
#符号“<-”相当于“=”
#变量名中不能出现“%,^,&,*,!
,?
,+,-,(),[],#,<>”因为这些符号中的大部分都是运算符。
#如果定义好了:
>SQ.wing1<-sqrt(wing1)
若要现实SQ.wing1的值,只需输入:
>SQ.wing1
或者把需要执行的命令放在圆括号内:
>(SQ.wing1<-sqrt(wing1))
2.1.2应用c函数连接数据
C()函数可以完成一个变量中存储多个值
例如:
>Wingcrd<-c(59,55,53.5,55,52.5,57.5,53,55)
如果查看Wingcrd的第一个值,则需要
>Wingcrd[1]
如果需要查看Wingcrd前五个值,则需要
>Wingcrd[1:
5]
如果需要查看Wingcrd除了第二个值以外的其他值,则需要
>Wingcrd[-2]
-负号表示删除了这个值
R有很多的内置函数,最基本的有sum,mean,max,min,median(中位数),var(方差)和sd(标准差)等。
>sum(Wingcrd)
或者存在一个新的变量中,
>S.win<-sum(Wingcrd)
>S.win
输入其他三组数据:
>Tarsus=c(22.3,19.7,20.8,20.3,20.8,21.5,20.6,21.5)
>Head=c(31.2,30.4,30.6,30.3,30.3,30.8,32.5,NA)
>Wt=c(9.5,13.8,14.8,15.2,15.5,15.6,15.7)
R中的变量名最好使用大写字母开头,这样可以避免将它和一些内部函数名混淆。
注意,数据里有一只鸟的头的尺寸是没有测量的,我们用NA表示,这时我们调用内部函数计算就会出现错误。
在向量中有一个缺失值的话,默认选项“na.rm=FALSE”(rm表示移除remove),将会导致R函数返回NA,为了避免此种情况,我们用“na.rm=TRUE”,
>sum(Head,na.rm=TRUE)
我们将接着学习如何连接这4个变量中的数据,
(1)c,cbind和rbind函数;
(2)matrix和vector函数;(3)数据框;(4)列表。
2.1.3使用c,cbind和rbind结合变量
Wingcrd翼弦,Tarsus踝骨,Head头,Wt体重,四组数据,每组8个值
c函数可以用来连接这些数据,同时连接这些数据中的8个值:
>BirdData<-c(Wingcrd,Tarsus,Head,Wt)
Data是R中的一个内部函数,因而不能直接用Data.
>Id<-c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4)
Id向量的作用是指出具有相似Id值的观察值属于同一种形态变量。
上面的命令过于繁琐,可以这么做:
>Id<-rep(c(1,2,3,4),each=8)
符号rep代表重复(repeat)
还可以以下用法:
>Id<-rep(1:
4,each=8)
或
>a<-seq(from=1,to=4,by=1)
>rep(a,each=8)
接着生成一个VarNames的新变量:
>Varnames=c("Wingcrd","Tarsus","Head","Wt")
>Varnames
>Id2=rep(Varnames,each=8)
>Id2
c函数是我们结合数据或者变量的一种选择,另一种选择是cbind函数,它的作用是将所结合的变量以列的形式输出。
如:
>Z<-cbind(Wingcrd,Tarsus,Head,Wt)
>Z
当我们有特殊需求时:
1、访问Z的第一列:
>Z[,1]
或者>Z[1:
8,1]
2、访问Z的第二行:
>Z[2,]或者>Z[2,1:
4]
>dim(Z)#表示Z的行数和列数
2.1.4使用vector函数结合数据
vector函数的作用与c函数类似,它可以用来代替c函数。
2.2数据的载入
2.2.1Excel中的数据载入
两种方法:
第一种(常用):
1、将EXCEL中的数据准备好;
2、将其提取到制表符分隔的ascii文件中;
3、关闭EXCEL;
4、使用read.table函数将数据载入到R中。
第二种:
是一个专门的R程序包,RODBC,它可以访问EXCEL中选定的行和列。
样本——变量形式:
列表示各种变量,如性别、年龄、成绩等,行表示各种样本、观察值、案例、对象或其他称之为样本单元的东西。
步骤:
在EXCEL中,“文件”——“另存为”——“保存类型”——选择“文本文件(制表符分隔)”,将EXCEL中的数据提取到一个制表符分隔的ascii文件中,注意存储位置。
(注意,此操作前,必须让EXCEL中的没有特殊的数据,也不可有空内容或者包含空格的名称,不然会出现NA)
read.table函数的使用
>Squid<-read.table(file=“C:
/RBOOK/squid.txt(存储目录)”,header=TRUE)
数据以数据框的形式存储到Squid,名称尽量简单、明确
而read.table中的header=TRUE,表示第一行包括了标签,如果文件中红没有标签,可以为header=FALSE.
第三章访问变量和处理数据子集
3.1访问数据框变量
>setwd(“C:
\Users\winner\Desktop\学习札记”)#设置默认存储目录
>Squid<-read.table(file=“C:
\Users\winner\Desktop\学习札记\RBOOK.txt”,header=TRUE)
1、用names命令查看正在处理的变量
>names(Squid)
3.1.1str函数
str命令告诉我们数据框中每个变量的属性
>str(Squid)
read.table和names和str函数结合在一起使用
3.1.2函数中的数据参数
>M1<-1m(GSI~factor(Location)+factor(Year),
data=Squid)
直接用(data=)来告诉R,变量在数据框Squid中。
但并不是所有的函数都可以如此做,因为有的函数美元data参数。
3.1.3$符号
如果一个函数没有data参数,可以用$符号:
>Squid$GSI
还可以:
>Squid[,6]#第6列也就是变量GSI那一列
计算均值:
两种方法都可以但建议用第一种
>mean(Squid$GSI)
3.1.4attach函数
用attach命令把Squid添加到R的搜索路径里,就可以直接输入变量而不加其他函数,就能看到该变量的值了。
>attach(Squid)
>GSI
>boxplot(GSI)
>mean(GSI)
attach虽然比较好,但是如果有两个具有相同变量名称的数据框,就会发生问题。
1、为了避免复制变量,不要输入attach(Squid)两次;
2、如果你使用attach命令,确保你使用唯一的变量名称,避免使用月份、位置等常见的名称;
3、如果你载入多个数据集,并且一次只处理一个数据集,考虑使用detach命令从R的搜索路径里移除一个数据框。
如:
>detach(Squid)
3.2访问数据子集
如果我只想处理某个位置的雌性数据,为了提取数据子集,我们需要知道性别是如何编码的,可以键入:
>Squid$Sex
结果显示了变量Sex的所有值,可以用unique命令显示这个变量里有多少个唯一值:
>unique(Squid$Sex)
出现1表示雌性,2表示雄性
为了访问所有的雄性数据,使用:
>Se1<-Squid$Sex==1#生成一个向量Se1与Sex具有相同的长度,且Sex的值为1时的值
>SquidM<-Squid[Se1,]#选择Squid中Se1等于TRUE,并把我们选择的数据存储到SquidM
>SquidM
上述命令也可以写为:
>Squid<-Squid[Squid$Sex==1,]
>Squid
若Location上的值有1、2、3、4这四个,我们想提取1、2、3的数据,我们可以使用符号|表示或,!
=表示不等于。
>Squid123<-Squid[Squid$Location==1|Squid$Location==2|Squid$Location==3,]
>Squid123<-Squid[Squid$Location!
=4,]
>Squid123<-Squid[Squid$Location<=3,]
>Squid123<-Squid[Squid$Location>=1&
Squid$Location<=3,]
|表示“或”;&表示“且”;!
=表示“不等于”;==为逻辑为/逻辑等于
3.2.1数据排序
按月份由低到高排列:
>Ord1<-order(Squid$Month)
>Squid[Ord1,]
3.3使用相同的标识符组合两个数据集
几个不同的数据集,但是每个数据集里都有1个或几个相同的变量,就可以将这几个数据集组合起来。
merge函数
>setwd(“C:
/RBOOK/”)
>Sql<-read.table(file=“squid1.txt”,
header=TURE)
>Sql<-read.table(file=“squid2.txt”,
header=TURE)
>SquidMerged<-merge(Sq1,Sq2,by=“Sample”)
>SquidMerged
merge命令采用两个数据框Sq1和Sq2作为参数,并使用变量Sample作为相同的标识符合并两个数据集。
3.4输出数据
write.table函数可以把数字输出到ascii文件。
提取雄性数据,并把它输出到文件,MaleSquid.txt
>SquidM<-Squid[Squid$Sex==1,]
>write.table(SquidM,
File=“MaleSquid.txt”,
Sep=““,quote=FALSE,append=FALSE,na=”NA”)
SquidM为想输出的变量,或者说文件名
Sep=““保证数据用空格隔开
quote=FALSE消除字符串的引号标志
na=”NA”指定缺失值的代替
append=FALSE打开一个新文件
函数
功能
示例
write.table
把一个变量写入到ascii文件
Write.table(Z,file=”test.txt”)
order
确定数据的顺序
Order(x)
merge
合并两个数据框
merge(x,y,by=”ID”)
attach
使数据框里的变量可以利用
attach(MyData)
str
显示一个对象的内部结构
str(MyData)
factor
定义变量作为因子
factor(x)
第4章简单的函数
4.1tapply函数
载入数据,并获取变量的基本信息
>setwd(“C:
/RBOOK/”)#设定默认目录
>Veg<-read.table(file=”Vegetation2.txt”,header=TRUE)#将名字为Vegetation2的ascii文件的数据转为Veg的数据框
>names(Veg)#查看Veg内的数据
4.1.1计算每个时间截面的均值(mean)——笨方法
以下代码计算了每个截面的平均丰富度和总的平均丰富度
>m<-mean(Veg$R)
>m1<-mean(Veg$R[Veg$Transect==1])
>m2<-mean(Veg$R[Veg$Transect==2])
>m3<-mean(Veg$R[Veg$Transect==3])
>m4<-mean(Veg$R[Veg$Transect==4])
>m5<-mean(Veg$R[Veg$Transect==5])
>m6<-mean(Veg$R[Veg$Transect==6])
>m7<-mean(Veg$R[Veg$Transect==7])
>m8<-mean(Veg$R[Veg$Transect==8])
>c(m,m1,m2,m3,m4,m5,m6,m7,m8)
4.1.2更高效地计算每个时间截面的均值——tapply
tapply只需一行命令即可完成上述命令达到的效果
>tapply(Veg$R,Veg$Transect,mean)
还可以写为:
>tapply(X=Veg$R,INDEX=Veg$Transect,FUN=mean)
除了求均值,还可以对其求标准差(sd函数)、方差(var函数)、长度(length函数)等
>Me<-tapply(Veg$R,Veg$Transect,mean)
>Sd<-tapply(Veg$R,Veg$Transect,sd)
>Le<-tapply(Veg$R,Veg$Transect,length)
>cbind(Me,Sd,Le)
4.2sapply函数和lapply函数
sapply和lapply函数不用多次输入同一个函数命令
格式如下:
>sapply(Veg[,5:
9],FUN=mean)
计算5-9这个五个变量的均值
tapply计算的是一个变量观察值子集的均值(或其他函数),而lapply和sapply函数计算的是一个或多个变量全部观察值得均值(或其他函数)。
FUN后面接要计算的函数
lapply和sapply的区别在于输出的不同,
>lapply(Veg[,5:
9],FUN=mean)
输出的结果的排列不同
lapply函数输出的是一个列表,而sapply函数的输出是一个向量,我们可以根据对输出格式的要求来选择适当的函数。
4.3summary函数
summary命令的结果给出了变量的最小值、第一四分位数、中位数、平均值、第三四分位数和最大值。
它的参数可以是一个变量、数据框或者cbind命令的输出。
>Z<-cbind(Veg$R,Veg$ROCK,Veg$LITTER)
>colnnames(Z)<-c(“R”,“ROCK”,“LITTER”)
>summary(Z)
下面的命令,也可以实现同样的功能:
>summary(Weg[,c(“R”,“ROCK”,“LITTER”)])
或者
>summary(Weg[,c(5,6,7)])
4.4table函数
table函数的作用是用来了解每个农场提供抽样动物的数量,每个性别和年份观察值的数量。
>table(Deer$Farm)
>table(Deer$Sex,Deer$Year)
函数
功能
示例
tapply
根据x的不同水平对y使用FUN的函数
tapply(y,x,FUN=mean)
sapply
对y的每一个变量使用FUN的函数
sapply(y,x,FUN=mean)
lapply
对y的每一个变量使用FUN的函数
lapply(y,x,FUN=mean)
sd
计算y的标准差
sd(y)
length
确定y的长度
length(y)
summary
计算基本信息
summary(y)
table
计算列联信息
table(x,y)
第5章基础绘图工具简介
5.1plot函数——散点图
绘制物种丰富度对底层变量“裸露土壤”记为BARESOIL的图形
>setwd(“C:
/RBOOK/”)
>Veg<-read.table(file=“Vegetation2.txt”,header=TRUE)
>plot(Veg$BARESOIL,Veg$R,xlab=”BARESOIL”,ylab=”R”)
plot命令的第一个参数显示在水平轴上,第二个参数显示在垂直轴上。
首先是因变量(反应变量),其后是自变量(解释变量),习惯上垂直轴绘制反应变量,水平轴绘制解释变量。
添加标题和x、y轴标签,以及设置x、y轴坐标界限:
>plot<-(x=Veg$BARESOIL,y=Veg$R,
xlab=“Exposedsoil”,
ylab=“Speciesrichness”,main=“Scatterplot”,
xlim=c(0,45),ylim=c(4,19))
5.2符号、颜色和尺寸
5.2.1改变绘图字符
通过pch取不同的值,得到不同的绘图字符pch共有1-20个不同的取值
以16为例(实心圆)
>plot<-(x=Veg$BARESOIL,y=Veg$R,
xlab=“Exposedsoil”,
ylab=“Speciesrichness”,main=“Scatterplot”,
xlim=c(0,45),ylim=c(4,19),pch=16)
5.2.2改变绘图符号的颜色
>plot<-(x=Veg$BARESOIL,y=Veg$R,
xlab=“Exposedsoil”,
ylab=“Speciesrichness”,main=“Scatterplot”,
xlim=c(0,45),ylim=c(4,19),pch=16,
col=2)
colors:
2红色3绿色
5.2.3改变绘图符号的尺寸
绘图符号的尺寸可以通过cex选项改变cex的缺省值为1,改为1.5则为原来的1.5倍
>plot<-(x=Veg$BARESOIL,y=Veg$R,
xlab=“Exposedsoil”,
ylab=“Speciesrichness”,main=“Scatterplot”,
xlim=c(0,45),ylim=c(4,19),
pch=16,cex=1.5)
5.3添加一条平滑线
通过使用lines命令在图形上添加合适的平滑线
>plot<-(x=Veg$BARESOIL,y=Veg$R,
xlab=“Exposedsoil”,
ylab=“Speciesrichness”,main=“Scatterplot”,
xlim=c(0,45),ylim=c(4,19))
>M.loess<-loess(R~BARESOIL,data=Veg)
>Fit<-fitted(M.loess)
>lines(Veg$BARESOIL,Fit)
函数
功能
示例
plot
y对x的图形
plot(y,x,xlab=”Xlabel”,xlim=c
(1),pch=1,main=”Main”,ylim=c(0,2),ylab=”Ylabel”,col=1)
lines
在已存在的图形上添加线
lines(x,y,lwd=3,lty=1,col=1)
order
确定数据的顺序
order(x)
loess
使用LOESS平滑
M<-loess(y~x)
fitted
得到拟合值
fitted(M)
第6章循环与函数
假设你有1000个数据集,对于每一个数据集你需要绘制一张图,并把它存为JPEG格式。
如果手动完成这个任务将花费很多时间,此时,一个能够不需要人们干涉就能自动执行任意次相同或类似命令的装置就是非常有价值的。
循环恰好可以用来解决这种问题,对1000个数据集可以进行这样的处理:
i从1变到1000
提取第i个数据集
对于第i个数据集选取适当的图像标签
针对第i个数据集作图
将i个数据集的图像存储起来
循环结束
6.2循环
任务:
写一个关于这些数据的报道,并且针对每一个鸟巢绘制一个同胞协商对到达时间的jpeg格式的散点图,现在有27个鸟巢,所以你需要绘制并存储27张图。
6.2.1像建筑师那样设计代码
大致步骤:
1、载入数据,熟悉变量名,使用read.table,names和str命令;
2、提取一个鸟巢的数据,对于这个子集绘制出同胞协商对到达时间的散点图;
3、添加图像的标题以及x轴和y轴的坐标轴名称。
此鸟巢的名字应该包含在主标题中。
4、提取第二个鸟巢的数据,确定需要对原始图像做哪些修改;
5、确定如何将图像存储为jpeg格式;
6、写一个可以提取第i个鸟巢数据的循环,使用第i个鸟巢的数据绘制图像,并将其存储为一个具有易识别的名字的jpeg格式图片。
6.2.2第1步:
载入数据
载入所需数据,给出变量名和它们的状态
>setwd(“C:
/RBOOK/”)
>Owls<-read.table(file=“Owls.txt”,header=TRUE)
>names(Owls)
>str(Owls)
6.2.3第2步和第3步:
绘制散点图并添加标签
弄清楚这个鸟巢的名字:
>unique(Owls$Nest)
给出了27个鸟巢的名字
提取一个鸟巢的数据
>Ow