R语言-数据结构
来源:互联网 发布:不吃乐乎什么意思 编辑:程序博客网 时间:2024/05/17 21:39
一、R中的数据类型
R中的数据类型有
标量、向量、矩阵、数组、数据框和列表
二、标量和向量
向量是用于储存数值型、字符型(含字符串 )或逻辑型数据的一维数组,通过函数c()进行创建。如:
a<-c(1,2,3)b<-c("one","two","three")c<-c(TRUE,FALSE,FALSE)d<-c(2:6) #产生从2-6的数组
标量则是只含一个元素的向量,如e<-2
我们可以通过方括号[]访问向量指定位置的元素,如:
> a[3] #直接指定某一个位置[1] 3> d[1:2] #指定位置区间[1] 2 3> b[c(1,3)] #指定某几个位置,位置通过c()函数拼接[1] "one" "three"
向量可以通过c()
添加新元素,通过c[-序号]
的方式删除元素
三、矩阵
矩阵是一个二维数组,只是每个元素都是相同的数据类型(数值型、字符型或逻辑型),通过函数matrix()创建,形如:
mymatrix<-matrix(vector, nrow =number_of_rows, ncol =number_of_colums, byrow =logical_value, dimnames =list(char_vector_rownames, char_vector_colnames))
其中vector是以向量形式给出的矩阵数据,nrow和ncol分别是行和列的维数,dimnames可选,是以字符型向量给出的行和列的名称。选项byrow表示矩阵按行填充(byrow=True)还是按列填充(byrow=False),默认按列填充,具体如下:
> mt1=matrix(1:20,5,4) #byrow=FALSE构造5*4矩阵> mt1 [,1] [,2] [,3] [,4][1,] 1 6 11 16[2,] 2 7 12 17[3,] 3 8 13 18[4,] 4 9 14 19[5,] 5 10 15 20> rnames=c("R1","R2");cname=c("C1","C2")> #byrow=True构造2*2矩阵(含行、列名)> mt2=matrix(cells,nrow = 2,ncol = 2,byrow = TRUE,dimnames = list(rnames,cnames))> mt2 C1 C2R1 1 26R2 24 68
同样通过方括号[]来选择指定位置的元素,具体如下:
> mt1[1,] #获取mt1第1行[1] 1 6 11 16> mt1[,1] #获取mt1第1列[1] 1 2 3 4 5> mt1[1,1] #获取mt第1行第1列的元素[1] 1> mt1[1:2,1] #获取mt第1列,第1-2个元素[1] 1 2> mt1[1:2,1:2] #获取mt1第1-2行,第1-2列的元素 [,1] [,2][1,] 1 6[2,] 2 7
四、数组
数组是矩阵的自然推广,维度可以大于2,但元素依旧只能是一种数据类型,通过函数array()创建,形如: myarray<-array(vector,dimensions,dimnames)
其中vector是以向量形式给出的数组数据,dimensions是一个数值型向量,用以表示各维度大小,dimnames可选,是各维度名称的列表,如:
dim1<-c("A1","A2") dim2<-c("B1","B2","B3")dim3<-c("C1","C2","C3","C4")#构造2*3*3的数组array1<-array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
元素选择同矩阵,此处不再赘述
五、数据框
数据框不同列可以包含不同数据类型,因此更为通用,类似其它软件中的数据集的概念。可以通过函数data.frame()创建,形如: mydata<-data.frame(col1,col2,col3…)
其中col为各列数据,可以为任何数据类型,具体如下:
> age<-c(25,34,28,52)> diabetes<-c("Type1","Type2","Type1","Type1")> status<-c("Poor","Improved","Excellent","Poor")> patientdata<-data.frame(patientID,age,diabetes,status)> patientdata patientID age diabetes status1 1 25 Type1 Poor2 2 34 Type2 Improved3 3 28 Type1 Excellent4 4 52 Type1 Poor
可以通过方括号[]或者指定列名的方式获得元素,具体如下:
> patientdata[1:2] #默认按列选 patientID age1 1 252 2 343 3 284 4 52> patientdata[c("diabetes","status")] #获得指定列 diabetes status1 Type1 Poor2 Type2 Improved3 Type1 Excellent4 Type1 Poor> table(patientdata$age,patientdata$status) #组成列联表 Excellent Improved Poor 25 0 0 1 28 1 0 0 34 0 1 0 52 0 0 1
如上可以通过$来选择某一列(变量),但每次都输入很麻烦,因此可以通过attach()+detach()或单独使用with()来简化代码。
- attach()+detach()
attach()可以将数据框加入R的搜索路径中,方便在该数据框中定位某变量,之后需要用detach()将数据框移除。但是,该步骤不会对数据框本身有影响,detach()也可以省略。如:
attach(patientdata)agedetach()
但如果存在多个同名变量时,原始对象会取得优先级,如:
> age<-c(1,2,3,4)> attach(patientdata)The following objects are masked _by_ .GlobalEnv: age, diabetes, patientID, status> age[1] 1 2 3 4> detach()
- with()
通过形如with(X, { })
的形式将{}内的语句在X数据框下进行(若只有一行语句,可省略{}),但此时赋值语句只在with()内部生效,如果想创建with()之外的对象,需要使用特殊赋值符号<<-实现,具体如下:
> with(patientdata,{myage<-age ;myage})[1] 25 34 28 52> myageError: object 'myage' not found> with(patientdata,{myage<<-age})> myage[1] 25 34 28 52
在patientdata中,patientID可用于区分个体,R中可通过形如row.names = patientID
指定实例标识符(case identifier)。
注意:无论是在attach还是with下即使对原数据进行了修改,如果直接使用字段名,获取到的仍是未修改前的结果。如果需要使用修改后的数据,则需要再次attach或者with
因子
如patientdata中所显示的,变量可归结为名义型(类别型)、有序型或连续型。名义型无顺序之分(如Diabetes),有序型有顺序之分,但不清楚差值(如Status),连续型则同时表示了顺序和数量(如age)
其中名义型和有序型变量在R中称为因子(factor)。因子在R中非常重要,因为它决定了数据的分析方式和视觉呈现。
函数factor()可以将原始字符串组成的内部向量映射到一系列整数上,具体来说:
通过diabetes<-factor(diabetes)
该向量将被映射为(1,2,1,1)。为表示有序向量,则需要指定参数ordered=True,通过status<-factor(status,ordered = TRUE)
此向量将被映射为(3,2,1,3)。以上有关字符型向量的水平默认按照字母顺序创建,因此很难让人满意,此时可以通过level选项来覆盖默认排序,形如
> status<-factor(status,ordered = TRUE,levels=c("Poor","Improved","Excellent"))> patientdata=data.frame(patientID,age,diabetes,status)> str(patientdata)'data.frame': 4 obs. of 4 variables: $ patientID: num 1 2 3 4 $ age : num 1 2 3 4 $ diabetes : Factor w/ 2 levels "Type1","Type2": 1 2 1 1 $ status : Ord.factor w/ 3 levels "Poor"<"Improved"<..: 1 2 3 1> summary(patientdata) patientID age diabetes status Min. :1.00 Min. :1.00 Type1:3 Poor :2 1st Qu.:1.75 1st Qu.:1.75 Type2:1 Improved :1 Median :2.50 Median :2.50 Excellent:1 Mean :2.50 Mean :2.50 3rd Qu.:3.25 3rd Qu.:3.25 Max. :4.00 Max. :4.00
通过str(patientdata)我们可以清除的看到数据框的信息,summary()则会根据不同数据类型进行处理。
矩阵和矩阵都可以通过rbind()增加一行,或cbind()增加一列
,通过类似向量的方法删除元素
六、列表
列表(list)是R中最复杂的一种数据类型,可以包含其他给类对象(含list),可以通过函数list()创建,形如: mylist<-list(object1,object2…)
具体使用如下:
> mylist=list("it is my list",ages=age,patientID)> mylist[[1]][1] "it is my list"$ages #等价于[[2]]只是赋予了名称[1] 25 34 28 52[[3]][1] 1 2 3 4#指定序号和名称效果一样> mylist[[2]][1] 25 34 28 52> mylist[["ages"]][1] 25 34 28 52> mylist[2] $ages [1] 25 34 28 52
需要注意的是列表也可以使用单括号获取元素,但这样的结果是一个更小的列表.而是用双中括号[ [ ] ]与$一样都是获得元素本身。
列表的元素添加和向量一眼使用c()
,但需要注意的是列表的每一个元素都是列表,因此添加元素之前需要先以list包装一下,否则结果可能不太理想,而且也不适合用list进行元素添加。
> test<-list(c1=c(1:2))> test<-c(test,c2=c(1:2)) #未包装> test$c1[1] 1 2$c21[1] 1$c22[1] 2> test<-list(c1=c(1:2))> test<-c(test,list(c2=c(1:2))) #包装后> test$c1[1] 1 2$c2[1] 1 2> test<-list(c1=c(1:2)) #使用list添加元素> test<-list(test,list(c2=c(1:2)))> test[[1]][[1]]$c1[1] 1 2[[2]][[2]]$c2[1] 1 2
如果要删除元素,只需要令某一位置为NULL即可
- R语言中数据结构
- R语言中的数据结构
- R语言_数据结构
- R语言的数据结构
- R语言数据结构
- R语言数据结构
- R语言-数据结构
- R语言 数据结构
- R语言数据结构-数据框
- R语言数据结构实例入门
- R语言数据结构2—matrix
- R语言数据结构3—array
- R语言数据结构4—dataframe
- R语言数据结构5—factor
- R语言数据结构6—list
- R语言数据结构1—vector
- R语言中的数据结构——向量
- R语言的数据类型和数据结构
- Unity3D相机切换效果
- K近邻算法(K-Nearest Neighbor)
- BZOJ 3991 洛谷P3320 [SDOI2015]寻宝游戏
- Qt笔记——三步设置Qt应用程序图标
- android获取手机基本信息
- R语言-数据结构
- 《写给那些想做程序员和不想做程序员的人》
- imgproc模块—仿射变换
- 堆排序
- tensorflow构造第一个神经网络
- 深度学习理解(一)
- uva题目笔记
- start和run方法区别
- Linux下串口通信详解(下)读写串口及关闭串口