R语言创建数据集

分类: R语言 |
一. 数据集
1. 在R语言中,进行数据分析的第一步是创建一个包含待研究数据并且符合要求的数据集。
2. 理解数据集
(1)数据集通常是矩形的数据列表,有行和列。
(2)R拥有广泛的装数据的结构:标量/向量/数据帧/表。
(3)R可以处理的数据类型:数值型/字符型/布尔型(真,假)/复合型/字节型。
二. 数据结构
3. 理解数据结构
(1)不同的数据结构的区别在于:怎么创建(how they're created);
(2)下图02-01是R的各种数据结构:
http://images.cnitblog.com/blog/543647/201307/26105454-aa0b7c78006649458b5ab2fad2483efc.jpg
4. 对象(object):可以分配给变量的任何东西,如常量,函数,数据结构,甚至是图。
5. 向量(vector)
(1)向量是一维数组,可以装数字型数据(numeric data),字符型数据(character data),逻辑型数据(logical data)。
注意:一个向量有且仅有一种类型的数据(numerical,character,logical)或模式。
(2)联合函数(combine function) c():是用来组织向量的。
例02-01:给向量赋值
http://images.cnitblog.com/blog/543647/201307/26112945-b9fbcfdcaeed4bd2ac81cf66e3b1b9cd.jpg
(3)标量(scalar)是仅有一个元素的向量(one-element vector),并且c是一个逻辑向量。
例02-02:给向量赋单值
http://images.cnitblog.com/blog/543647/201307/26113609-b9f5b3a4579f4e5db8b329991413a2c2.jpg
注意:"h<-"这个符号后面可以有空格也可以没有空格去接“-3”这个值。
(4)使用代表位置的数值组成的向量来表示向量的一个或几个元素。
例02-03:取向量中的元素
http://images.cnitblog.com/blog/543647/201307/26130827-66c5c513a05d4f8e8ba1294d92c8d133.jpg
注意:向量的第一个元素的位置值是1。
6. 矩阵(Matrices)
(1)矩阵是一个二维的阵列,并且每一个元素都是相同的类型(数值,字符或者是逻辑值)。
(2)用matrix函数来创建矩阵。
myymatrix<-matrix(vector,nrow=number_of_rows,ncol=number_of_columns,byrow=logical_value,dimnames=list(char_vector_rownames,char_vector_colnames))
·vector:包含矩阵的元素;
·nrow,ncol:指定矩阵的行列维数;
·dimnames(可选项):行,列名字的特征矩阵;
·byrow(可选项):指示这个矩阵是按行(byrow=TRUE)或按列(byrow=FALSE)填入。
例02-04:创建矩阵
http://images.cnitblog.com/blog/543647/201307/26133352-bfbf09e571ad4a6d80572493dfe0efa7.jpg
·byrow的值缺省为FALSE,即按列赋值;
·dimnames的值缺省,则无行列标签。
例02-05:创建矩阵
http://images.cnitblog.com/blog/543647/201307/26133658-38b74aca594f453babe3258d943011ca.jpg
·创建了一个2×2的矩阵,先给矩阵按行赋值,再给矩阵按列赋值。
·矩阵的行名称为:R1,R2;列名称为C1,C2。
例02-06:创建矩阵
http://images.cnitblog.com/blog/543647/201307/26134925-61fc7f6be300460bbdf384b9132b8419.jpg
http://images.cnitblog.com/blog/543647/201307/26134941-7741456e7641450fa0efde4c98dbb3bb.jpg
·二维矩阵,在确定矩阵的总元素个数后,可以仅仅确定的给出行数或列数。
http://images.cnitblog.com/blog/543647/201307/26134524-666d771f5eeb45a49d0c4540445bde7f.jpg
·X[i,]:表示矩阵X第i行的元素;
·X[,j]:表示矩阵X第j列的元素;
·X[i,j]:表示矩阵X第i行第j列的元素。
·下标i,j可以是表示行/列的数值或数值向量。
7. 数组(Arrays)
(1)数组与矩阵类似,但是可以有二维或多维。
(2)用array这个函数来创建数组。
myarray<-array(vector,dimensions,dimnames)
·vector:包含数组的所有元素;
·dimensions:是一个数值向量,给定每一维的最大下标,即每一位能包含的最多元素个数;
·dimnames(可选项):每一维的名字的列表。
注意:
1)在大于二维时,dimnames的第一二个变量表示行列的名称。
2)array函数中,没有byrow这个变量,即在一个数组的分量矩阵中,不存在是按行还是按列赋值。
3)数组中的每一个元素都是相同的类型。
4)从下面的例子来看,在array函数的分量矩阵中,是按列赋值的。
例02-08:创建数组
http://images.cnitblog.com/blog/543647/201307/26141651-105814226ad34ab795d00cb6821c4d97.jpg
例02-09:创建数组
http://images.cnitblog.com/blog/543647/201307/26143708-c60e12c6a1bc439d8fc1d44a3e235580.jpg
http://images.cnitblog.com/blog/543647/201307/26143725-c9c31b6c468a49f1992128d3ab0d138f.jpg
8. 数据帧(Data frames)
(1)每一列有且仅有一种类型的数据,不同的列可以是不同类型的数据。
(2)使用data.frame函数创建数据帧:
mydata<-data.frame(col1,col2,col3,...)
·col1,col2,col3,...可以是任何类型的列向量。
(3)names函数:表示每一列的名字。
例02-10:创建数据帧
http://images.cnitblog.com/blog/543647/201307/26145502-67f38512080b48598f5e6600f2367803.jpg
例02-11:指定数据帧中的元素
http://images.cnitblog.com/blog/543647/201307/26150602-f0dbc11990864775b6b731424f218481.jpg
·
http://images.cnitblog.com/blog/543647/201307/26150852-f879b4f953734269a0352d90bf965ab2.jpg
· 以数据帧patientdata中的diabetes的内容作为行名称,status的内容作为列名称,创建一个二维矩阵;
(4)attach()函数:添加数据帧到R语言的某个搜索路径;当遇到一个变量时,则检查这个搜索路径中的数据帧,以便能定位这个变量。
detach()函数:把一个数据帧从搜索路径中移除。
注意:detach()函数对于数据帧本身而言,什么都没有做;并且是可选的,但是对于好的编程风格是有必要加上的。
例02-12:attach()函数与detach()函数
http://images.cnitblog.com/blog/543647/201307/26160246-7fadf8d6877c4d7a9473746d4919a9a8.jpg
http://images.cnitblog.com/blog/543647/201307/26160300-1255008ea6e74dcd8fec001fad2bb75c.jpg
等价于:
http://images.cnitblog.com/blog/543647/201307/26160402-633c58df8ad64951b6f9c332f759421e.jpg
http://images.cnitblog.com/blog/543647/201307/26160417-f7ef8fc63b9c4c4491914f5409fe50bd.jpg
注意:attach()和detach()函数最好是适用于分析一个数据帧,并且同一个名字仅有对象。
(5)with()函数:避免对象被掩盖的警告。
例02-13:with()函数的使用
http://images.cnitblog.com/blog/543647/201307/26163524-bdf63605e3a14e17b5ed6b70b5e20bd4.jpg
·{ }里面声明的内容如:summary(mpg,disp,wt),plot(mpg,disp),plot(mpg,wt),都认为使用了mtcars这种数据帧。
·如果只有一个声明(statement),则{ }可用可不用。
A)with()函数的赋值仅仅在函数内部有效:
http://images.cnitblog.com/blog/543647/201307/26164453-7d9086990ef345e78585f6eaadcb9fce.jpg
B)想要创建在with()函数外面仍然有效的变量,使用赋值符号"<<-",而非赋值符号"<-"。
http://images.cnitblog.com/blog/543647/201307/26164702-929bc19581f9424c816b28717d643cc9.jpg
(6)case identifiers
仍以前面的例子patientdata为例子,patientID用于在数据集中标识每个个体。
在R语言中case identifiers可以由数据帧函数中的一个rowname的可选项标识。
例02-14:case identifiers
http://images.cnitblog.com/blog/543647/201307/26165517-2d0f8782eabd463680042d7a73a0c4c1.jpg
9. 因子(Factors)
(1)变量的类型
·名义变量(nominal variables):绝对的,没有隐含次序的(categorical,without an implied order);
·次序变量(ordinal variables):有隐含次序,但数值不隐藏(implied order,but not amount);
·连续变量(continuous variables):次序和数值都隐藏(both order and amount are implied)。
·因子(factors):名义变量+次序变量。{nominal(categorical) &ordinal(ordered) variables}
·因子在R语言中非常重要,因为其决定数据被如何分析,怎样呈现。
(2)factor()函数:把名义变量对应的绝对数值存储在一个内部向量中。
例02-15:使用factor()函数
http://images.cnitblog.com/blog/543647/201307/26175319-8d5194a92fa644a6a5af1522d2c6185c.jpg
·缺省order这个量,则status中的元素的等级按照字母顺序而递增排列;
·存在order这个量,.............................................................;
·要使status中元素等级不按照字母顺序排列,则令order=TRUE,并用可选项levels()函数,实例化期待的排列顺序。
例02-16:使用factor()函数
http://images.cnitblog.com/blog/543647/201307/26175025-09f57c576a0448ebb40b04844656515c.jpg
10. 表(Lists)
(1)表是R语言中,最复杂的数据结构。
(2)List是R语言中很重要的数据类型,有以下两个原因:
(3)使用list()函数来创建一个list:
mylist<-list(object1,object2,...)
或 mylist<-list(name1=object1,name2=object2,...)
·object 可以是任意的结构类型
例02-17:创建一个表
http://images.cnitblog.com/blog/543647/201307/26180658-30be6901a77e4852a3bc592fdb14af78.jpg
·该例子中,一个list有4种成分:一个字符串,一个数值型向量,一个矩阵,以及一个字符型向量。
总结:
· 变量的值不是被声明的,而是来自于第一次被赋值;
· R语言中没有标量值,通常用一个元素的向量来表示标量;
· A$x:表示数据帧A中的变量x;
· R语言中没有多行注释或者是块注释,只能在每行的开头用#符号表示该行为注释;
· 在测试时,可以用if(FALSE){...}使得一段某段代码不被执行;用if(TRUE){...}使得一段代码被执行。
· 给一个向量,数组,矩阵或表中不存在的元素赋值,将会扩大其结构,以容纳新的值。
例02-18:给向量赋其本来不存在的值,使其扩展
http://images.cnitblog.com/blog/543647/201307/26183338-c803673034974cdd8f5dc2d5c1338896.jpg
例02-19:使扩展后的向量收缩
http://images.cnitblog.com/blog/543647/201307/26183721-c7f991d5619843aea33af831fbbabe5f.jpg
· R语言从1开始计数,而非0.
例02-20:
http://images.cnitblog.com/blog/543647/201307/26183946-456ca7e3176b4b628e42d68303848ea1.jpg
·本小结: