




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
注:本机选用d:/RBook/作为工作目录,可在“文件-改变工作目录”中修改R代码中“#”后边的都表示注释第二章 R中的数据输入2.1 R第一步基础:录入数据()一般代表着一个函数本章所有原始数据:Wing=c(59,55,53.5,55,52.5,57.5,53,55)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.6,15.7)2.1.2使用c函数连接数据wing=c(59,55,53.5,55,52.5,57.5,53,55) #用C()函数可使一个变量中存储多个值wing1 59.0 55.0 53.5 55.0 52.5 57.5 53.0 55.0 #查看输出的所有结果wing31 53.5 #输出变量中的第三个数据wing1:41 59.0 55.0 53.5 55.0 #输出第一到第四个数据wing-21 59.0 53.5 55.0 52.5 57.5 53.0 55.0 #输出除了第二个数据外的所有数据wing1,2,3错误于wing1, 2, 3 : 量度数目不对wing-(2:5)1 59.0 57.5 53.0 55.0 #输出除了第二到第五个 外的所有数据wingc(1,3,5,7)1 59.0 53.5 52.5 53.0 #输出第1、3、5、7个数据,注意这里不能不加只写1357,否则会出错wingwing54&wing55) #获取向量中大于55的下标1 1 6Wingwhich(Wing55) #再获取向量中大于55的下标后显示其值1 59.0 *使用vector函数结合数据(可用以代替c函数)生成一个长度为8,包含所有8只鸟的wingcrd数据的一个向量:W=vector(length=8)W 1=59W 2=55W 3=53.5W 4=55W 5=52.5W 6=57.5W 7=53W 8=55 W1 59.0 55.0 53.5 55.0 52.5 57.5 53.0 55.0 W1:41 59.0 55.0 53.5 55.0Wc(1,3,5)1 59.0 53.5 52.5 #访问W中一些特定的元素2.1.5*使用矩阵(matrix)结合数据Dmat=matrix(nrow=2,ncol=3) #第一步必需事先定义好矩阵的大小!生成的顺序是生成完第一列后再生成第二列Dmat ,1 ,2 ,31, NA NA NA2, NA NA NADmat=matrix(nrow=8,ncol=4) #生成一个8行4列的矩阵Dmat,1=c(59,55,53.5,55,52.5,57.5,53,55) #为矩阵中的列赋值Dmat,2=c(22.3,19.7,20.8,20.3,20.8,21.5,20.6,21.5)Dmat,3=c(31.2,30.4,30.6,30.3,30.3,30.8,32.5,NA)Dmat,4=c(9.5,13.8,14.8,15.2,15.5,15.6,15.6,15.7) #如果在录入的过程中录多或录少数据会报错:被替换的项目不是替换值长度的倍数colnames(Dmat)=c(Wingcrd,Tarsus,Head,Wt) # Dmat本身没有列标签,用colnames函数给Dmat的列加上名称Dmat # 输出带有标签的矩阵Dmat Wingcrd Tarsus Head Wt1, 59.0 22.3 31.2 9.52, 55.0 19.7 30.4 13.83, 53.5 20.8 30.6 14.84, 55.0 20.3 30.3 15.25, 52.5 20.8 30.3 15.56, 57.5 21.5 30.8 15.67, 53.0 20.6 32.5 15.68, 55.0 21.5 NA 15.7#在这种情况下,Dmat的值是以列的形式输入的,同样,也能以行的形式输入:Dmat1,=c(59,22.3,31.2,9.5)Dmat2,=c(55,19.7,30.4,13.8)Dmat3,=c(53.5,20.8,30.6,14.8).#结果与之前以列的形式输入的一致矩阵的运算:转置函数t()a=matrix(1:6,nrow=2,ncol=3)a ,1 ,2 ,31, 1 2 32, 4 5 6t(a) ,1 ,21, 1 42, 2 53, 3 6a=b=matrix(1:6,nrow=2,ncol=3) #设定两个矩阵a和ba+b ,1 ,2 ,31, 2 6 102, 4 8 12 #两个矩阵相加就是对应元素的相加a*b ,1 ,2 ,31, 1 9 252, 4 16 36 #同理,*只能是对两个矩阵中的对应元素相乘而实际上,两矩阵的相乘并非对应元素的简单相乘a=matrix(1:6,nrow=2,ncol=3)b=matrix(1:6,nrow=3,ncol=2)a%*%b ,1 ,21, 22 492, 28 64使用solve(a,b)函数解线性方程组 ax=b,a是矩阵,b是1到4的向量a=matrix(rnorm(16),4,4) # rnorm(16)是按照正态分布生成16个随机数a ,1 ,2 ,3 ,41, -1.4354706 -2.6136468 0.1203700 -0.1071282 (-1.4354706)*x1+(-2.6136468)*x2 +0.1203700*x3+(-0.1071282)*x42, -2.3366871 -1.6241011 1.3914248 -0.70836703, -0.4246233 -0.2239177 -1.3318359 0.60110724, 1.4383145 0.3537002 -0.4863774 0.6333747b=c(1:4)b1 1 2 3 4solve(a,b) #逆矩阵1 -2.8610758 0.7731663 6.3016333 17.21986962.1.6使用data.frame(数据框)函数结合数据都是二维的表单,区别在于矩阵中的全部的元素都是数值型的(数组也是如此),而数据框就不一定了,有可能这一列是数值型的数据,另一列就是字符型的数据,每一列都可以是不同的数值。用数据框结合具有相同长度的变量,数据框的每一行就包含同一样本的不同观察值Wing=c(59,55,53.5,55,52.5,57.5,53,55)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.6,15.7)Dfrm=data.frame(Wing,Tarsus,Head,Wt)Dfrm Wing Tarsus Head Wt1 59.0 22.3 31.2 9.52 55.0 19.7 30.4 13.83 53.5 20.8 30.6 14.84 55.0 20.3 30.3 15.25 52.5 20.8 30.3 15.56 57.5 21.5 30.8 15.67 53.0 20.6 32.5 15.68 55.0 21.5 NA 15.7 #Dfrm这个变量就是一个数据框2.2外部数据的载入2.2.1载入excel中的数据对于大型数据,使用Excel编辑后再导入到R的方法步骤包括:(1)将Excel中的数据准备好,像SPSS那样,将数据排列为样本-变量的形式,以Excel中的第一列来识别样本单元,第一行作为变量名(2)另存为文本文件(制表符分隔)(3)关闭excel后用read.table函数将数据载入到R中Squid=read.table(file=D:RBooksquid.txt,header=TRUE) #header=TRUE表示第一行包括标签,如果没有标签的话可以将其改为header=FALSE这个命令实现把数据框从squid.txt文件中读取出来,以数据框的形式存储到squid中Squid Sample Year Month Location Sex GSI1 1 1 1 1 2 10.44322 2 1 1 3 2 9.83313 3 1 1 1 2 9.73564 4 1 1 1 2 9.31075 5 1 1 1 2 8.9926第三章 访问变量和处理数据子集3.1 访问数据框变量setwd(d:/RBook/) #斜线有两种,一种是”,另一种是”/”Squid=read.table(file=squid.txt,header=TRUE) #注意与上面的写法的区别,这里使用了setwed函数,此时我们只需要做的是改一下setwed函数中的目录名就可以了Squid Sample Year Month Location Sex GSI1 1 1 1 1 2 10.44322 2 1 1 3 2 9.83313 3 1 1 1 2 9.73564 4 1 1 1 2 9.31075 5 1 1 1 2 8.9926#这样就生成了一个数据框,并且R中大部分函数用数据框工作,所以在使用R时更倾向于setwd而不是scan函数names(Squid)1 Sample Year Month Location Sex GSI #使用names命令查看正在处理的变量3.1.1 str函数通过str(结构)命令可以获知数据框中每个变量的属性str(Squid)data.frame: 2644 obs. of 6 variables: $ Sample : int 1 2 3 4 5 6 7 8 9 10 . $ Year : int 1 1 1 1 1 1 1 1 1 1 . $ Month : int 1 1 1 1 1 1 1 1 1 2 . $ Location: int 1 3 1 1 1 1 1 3 3 1 . $ Sex : int 2 2 2 2 2 2 2 2 2 2 . $ GSI : num 10.44 9.83 9.74 9.31 8.99 .可以通过str函数来检验分隔符是否使用正确:setwd(d:/RBook)Squid2=read.table(file=squidGSI.txt,dec=,header=TRUE)str(Squid2)data.frame: 2644 obs. of 6 variables: $ Sample : int 1 2 3 4 5 6 7 8 9 10 . $ Year : int 1 1 1 1 1 1 1 1 1 1 . $ Month : int 1 1 1 1 1 1 1 1 1 2 . $ Location: int 1 3 1 1 1 1 1 3 3 1 . $ Sex : int 2 2 2 2 2 2 2 2 2 2 . $ GSI : Factor w/ 2472 levels 0.0064,0.007,.: 1#错误地告诉R在文件中小数的分隔符是逗号”,”而不是点”.”,GSI被认为是一个因子,GSI不是数值型。因此read.table函数、names函数以及str函数可以结合在一起使用。Year错误: 找不到对象YearGSI错误: 找不到对象GSI #在这里,R无法识别数据框Squid中的任何变量,出错3.1.2函数中的数据参数(访问数据框中变量的方法)确定R中的一个函数(如线性回归方程lm),根据变量(如GSI、Month、Year、Location)指定模型最后告诉函数lm在数据框Squid中可以找到数据。setwd(d:/RBook/)Squid=read.table(file=squid.txt,header=TRUE)M1=lm(GSIfactor(Location)+factor(Year),data=Squid) #“data=”是告诉R,变量在数据框Squid中M1Call:lm(formula = GSI factor(Location) + factor(Year), data = Squid)Coefficients:(Intercept) factor(Location)2 factor(Location)3 factor(Location)4 factor(Year)2 factor(Year)3 factor(Year)4 1.3939 -2.2178 -0.1417 0.3138 1.3548 0.9564 1.2270注:并不是所有函数都支持data选项,例如mean就会出错mean(GSI,data=Squid)错误于mean(GSI, data = Squid) : 找不到对象GSI #出现错误的原因是函数mean不含data参数总之,如果一个函数有data参数就使用它,这是最简洁的编程方法3.1.3 $符号方法一:在一个函数没有data参数的情况下访问变量则需要用到$符号Squid$GSI方法二:访问指定行列(GSI变量在数据框中的第六列)Squid,6无论是使用哪种方法都可以计算平均值mean(Squid$GSI)1 2.187034mean(Squid,6)1 2.187034 #该方法容易导致遗忘,一段时间后有可能会忘记GSI数据在第六列3.1.4 attach函数也可以说是方法三,如果想使用GSI数据集里的某个变量就要每次输入Squid$,比较繁琐,使用attach可以避免这种麻烦,该命令使数据框Squid里所有的变量都是可用的。setwd(d:/RBook/)Squid=read.table(file=squid.txt,header=TRUE)attach(Squid) #attach命令把Squid添加到R的搜索路径里GSI #对于其他变量同样适用此时就可以使用每一个函数了而不需要data参数注意:如果绑定一个与外部具有相同变量名称的数据框,或绑定的两个数据框具有相同名称的变量时就会出问题。解决方法:要么使用datach函数,要么处理一个新的数据集时简单地关闭R控制台并重启为了避免复制变量,不要输入attach(Squid)命令两次3.2访问数据子集使用unique命令显示这个变量里有多少个唯一值:setwd(d:/RBook/)Squid=read.table(file=squid.txt,header=TRUE)unique(Squid$Sex) 1 2 1 #1表示雄性,2表示雌性现需访问所有雄性数据:Sel=Squid$Sex=1 #生成一个向量Sel与变量Sex具有相同长度如果Sex值为1则变量的值是TRUE,这样的向量称为布尔向量SquidM=SquidSel, #选择Squid中Sel等于TRUE的行,并将选择出来的数据存储到SuqidM中SquidM Sample Year Month Location Sex GSI24 24 1 5 1 1 5.297048 48 1 5 3 1 4.296858 58 1 6 1 1 3.500860 60 1 6 1 1 3.248761 61 1 6 1 1 3.2304同时,可以把上述两条命令合并成一条:获取雌性数据SquidM=SquidSquid$Sex=2,SquidM Sample Year Month Location Sex GSI1 1 1 1 1 2 10.44322 2 1 1 3 2 9.83313 3 1 1 1 2 9.73564 4 1 1 1 2 9.31075 5 1 1 1 2 8.9926基于第二个变量的值的条件下选择变量数据(或数据框)的过程称为条件选择为了提取位置1,2或3的数据,可以使用以下语句得出相同的结果Squid123=SquidSquid$Location=1|Squid$Location=2|Squid$Location=3,Squid123=SquidSquid$Location=1&Squid$Location=3,Squid123=SquidSquid$Location4,Squid123=SquidSquid$Location!=4,同理,既来自于雄性鱿鱼也来自位置1的代码:SquidM.1=SquidSquid$Sex=1&Squid$Location=1,来自位置1或2的雄性数据:SquidM.12=SquidSquid$Sex=1&(Squid$Location=1|Squid$Location=2),但应注意!不能分开使用上面的命令:SquidM=SquidSquid$Sex=1, #在提取雄性数据分配给SquidM时,它比Squid的维数要小(较小的行)SquidM1=SquidMSquid$Location=1, #布尔向量Squid$Location=1比SquidM的行的数量长SquidM1 #Sample Year Month Location Sex GSI24 24 1 5 1 1 5.297058 58 1 6 1 1 3.500860 60 1 6 1 1 3.24872640 2640 4 10 1 1 0.02002643 2643 4 10 1 1 0.0132NA NA NA NA NA NA NANA.1 NA NA NA NA NA NANA.2 NA NA NA NA NA NANA.3 NA NA NA NA NA NANA.4 NA NA NA NA NA NANA.5 NA NA NA NA NA NA 如果一个子集选择命令的输出显示下面的信息,表示数据框中在这4年里没有同时来自1月份和位置为1的测量值SquidSquid$Location=1&Squid$Year=4&Squid$Month=1,1 Sample Year Month Location Sex GSI (或0-长度的s)3.2.1 数据排序现根据变量“月份”由低到高的值排列GSI数据setwd(d:/RBook/)Squid=read.table(file=squid.txt,header=TRUE)Ord=order(Squid$Month)SquidOrd, #需要处理的是Squid的行,所以把Ord放在逗号前 Sample Year Month Location Sex GSI1 1 1 1 1 2 10.44322 2 1 1 3 2 9.83313 3 1 1 1 2 9.73564 4 1 1 1 2 9.31075 5 1 1 1 2 8.99263.3使用相同的标识符组合两个数据集这里需要处理两个或以上具有相同标识符的不同文件或工作表合并两个数据集使得第一个数据集里第j个样品放在第二个数据集里第j个样品的旁边(其中故意删除了第四个数据)setwd(d:/RBook/)Sq1=read.table(file=squid1.txt,header=TRUE)Sq2=read.table(file=squid2.txt,header=TRUE) #用来读取两个单独的文件SquidMerged=merge(Sq1,Sq2,by=Sample) #merge函数命令#merge函数命令采用两个数据框Sq1和Sq2作为参数并使用变量Sample作为相同的标识符合并两个数据集。该函数的一个有用的选项是all,缺省状态下的设置是FALSE,含义就是Sq1和Sq2的行如果有缺失值将被忽略,同理,当all为TRUE时,有一方的数据在另一方没出现的话就用Na填充。SquidMerged Sample GSI YEAR MONTH Location Sex1 1 10.4432 1 1 1 22 2 9.8331 1 1 3 23 3 9.7356 1 1 1 24 5 8.9926 1 1 1 25 6 8.7707 1 1 1 26 7 8.2576 1 1 1 2 #合并之后第四个样品数据丢失!setwd(d:/RBook/)Sq1=read.table(file=squid1.txt,header=TRUE)Sq2=read.table(file=squid2.txt,header=TRUE)SquidMerged=merge(Sq1,Sq2,by=Sample,all=TRUE) SquidMerged Sample GSI YEAR MONTH Location Sex1 1 10.4432 1 1 1 22 2 9.8331 1 1 3 23 3 9.7356 1 1 1 24 4 9.3107 NA NA NA NA5 5 8.9926 1 1 1 26 6 8.7707 1 1 1 27 7 8.2576 1 1 1 23.4输出数据此处使用的是write.table把数字信息输出到ascii文件中的命令(与read.table读取文件命令相对应)setwd(d:/RBook/) #锁定需要输入输出的文件夹Squid=read.table(file=squid.txt,header=TRUE) #用read.table命令读取原始文件中的数据SquidM=SquidSquid$Sex=1, #选择变量Sex中为雄性即1的数据存入SquidM变量write.table(SquidM,file=MaleSquid1.txt,sep= ,quote=FALSE,append=FALSE,na=NA) #使用write.table命令将SquidM变量输出,在d:/RBook/文件夹中生成一个名为MaleSquid1.txt的txt文件。注:在write.table函数里第一个参数是想要输出的变量,sep= 保证数据用空格隔开, na=NA指定缺失值由什么来代替,引述quote=FALSE消除字符串(标题)的引号标志,append表示是否将这些数据添加到已有的文件尾部,TRUE表示要添加,FALSE就不添加,所以会新建一个新的文件(在本例中,因需要新建一个文件故要选择FALSE)注:这些元素用空格进行隔离在这里缺少了第一列的名字,可通过改变sep和quote选项setwd(d:/RBook/)Squid=read.table(file=squid.txt,header=TRUE)SquidM=SquidSquid$Sex=1,write.table(SquidM,file=MaleSquid2.txt,sep=,quote=TRUE,append=FALSE,na=NA)同上,R就会在d:/RBook/文件夹中生成一个名为MaleSquid.txt的txt文件3.5重新编码分类变量从前面章节中可以使用str函数鱿鱼数据框中每个变量的属性概念:从输出的结果可以看出,变量Location编码为1,2,3或4,Sex为1,2或3,这样的变量是分类或名义变量,把名义变量重新编码、在数据框中生成一个新的变量有助于我们编程setwd(d:/RBook/)Squid=read.table(file=squid.txt,header=TRUE)Squid$Sexfactor(Squid$Sex) #试输出Squid$Sex和factor(Squid$Sex),两者的区别在于factor命令会多输出一行,Levels: 1 2,说明Sex有两个水平,1和2Squid$fSex=factor(Squid$Sex) #将factor(Squid$Sex)存放到一个新的变量fSex中,在变量名前使用f用以表示它是名义变量,也被称为因子Squid$fSex=factor(Squid$Sex,levels=c(1,2),labels=c(M,F) #将因子fSex中的1,2转换为M,F#将所有1和2转换为M和F后再用str命令查看数据框Squid,对比两次Squid发现框中多了fSex因子查看Squid中的fSex因子:已经由原来的1,2转换为M,F了使用fSex因子:SquidM=SquidSquid$fSex=M, #同时对比使用Sex变量SquidM=SquidSquid$Sex=1,注:在这里,直接输入Squid$fSex不用加入factor即可显示出factor(Squid$Sex)的效果(在输出所有元素后额外显示多一行Levels: M F用以告诉我们fSex由两个水平M和F)why?第四章 简单的函数4.1 tapply函数setwd(d:/RBook)Veg=read.table(file=Vegetation2.txt,header=TRUE)names(Veg) #查看Veg中所有的变量名4.1.1计算每个时间截面的均值注意这里需要用到两个变量m=mean(Veg$R)m1=mean(Veg$RVeg$Transect=1)m2=mean(Veg$RVeg$Transect=2)m3=mean(Veg$RVeg$Transect=3)m4=mean(Veg$RVeg$Transect=4)m5=mean(Veg$RVeg$Transect=5)m6=mean(Veg$RVeg$Transect=6)m7=mean(Veg$RVeg$Transect=7)m8=mean(Veg$RVeg$Transect=8)c(m,m1,m2,m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 马路护栏面试题及答案
- 金融专接本试题及答案
- 三桥叉车考试试题及答案
- 北京网络知识培训课件
- 铣床考试试题及答案
- 化学氧气考试题及答案
- 视网膜脱离考试题及答案
- 一次函数试题及答案
- 校内外玩耍安全知识培训课件
- 2025年达州市水利发展有限责任公司招聘考试笔试试题(含答案)
- 2025总公司授权分公司签订合同的示范文本
- 2025年医师定期考核法律法规试题及答案
- 学堂在线 大学计算机基础 章节测试答案
- 县域共配仓农村物流配送成本控制报告
- 二级实验室生物安全管理手册
- 2025年新演员签约协议书
- 上海金山区卫生系统招聘考试(护理学专业知识)题含答案2024年
- 2025届安徽省A10联盟高三上学期开学考-物理试题(含答案)
- 全国“安康杯”职工安全健康意识与应急技能知识竞赛试卷附答案
- 基孔肯雅热防控技术指南(2025年版)试题及答案
- 护理实践指南手术室废物管理
评论
0/150
提交评论