R语言 常用数据结构
关键词: r语言数据结构 r语言查看数据结构 常用的数据结构
要毕业了,怕毕业后再也没有机会拾起R语言,所以趁早把这些写下来。
一般来讲,R语言中有三种数据结构,第一种是数组,第二种是列表,第三种是数据框。
第一种: 数组(包括向量和矩阵)。
数组可以用来储存数值型(numeric)、逻辑型(logical)和字符型(character)三种类型的数据。
例如:
储存字符型数据
> x = array(rep("a",6),dim=c(2,3)) > x [,1] [,2] [,3] [1,] "a" "a" "a" [2,] "a" "a" "a"
储存逻辑型数据
> x = array(rep(T,6),dim=c(2,3)) > x [,1] [,2] [,3] [1,] TRUE TRUE TRUE [2,] TRUE TRUE TRUE
储存数值型数据
> x = array(rep(1,6),dim=c(2,3)) > x [,1] [,2] [,3] [1,] 1 1 1 [2,] 1 1 1
在上面的例子中我们可以看到,我们创建这个数组使用的是array函数,在用帮助文档查看array函数时(?array或者help(array)我们可以发现,该函数主要包括3个参数,分别是data、dim和dimnames。
那么以以下例子,我们来看一下这个array函数怎么使用:
> x = array(rpois(6,10),dim=c(2,3),dimnames=list(c("male","female"),c("apple","banana","pear"))) > x apple banana pear male 13 7 8 female 8 12 7
这里,我们使用了rpois来产生了6个符合泊松分布的数字,注:在这里这6个数字是什么不重要,所以我们不讲解为什么要使用rpois,只需要知道这是6个数字。然后dim=c(2,3),这里我们可以看到一个新的函数叫做c(),这个函数实际上是将一些值组合成一个向量,该函数用得非常广泛,但是非常简单,我们这里不详细讲解了。dim=c(2,3)表示这是一个二维数组,第一维的最大下标为2,第二维的最大下标为3。当然,我们的数组不局限于二维,可以是三维或者更多维。
> x = array(rpois(24,10),dim=c(2,3,4),dimnames=list(c("male","female"),c("apple","banana","pear"),c("Mon","Tue","Wed","Thu"))) > x , , Mon apple banana pear male 11 12 10 female 9 9 9 , , Tue apple banana pear male 8 15 7 female 3 5 10 , , Wed apple banana pear male 9 9 13 female 12 12 9 , , Thu apple banana pear male 11 5 9 female 9 9 8
上面这个例子是一个三维的数组。我们继续来看这个dimnames。dimnames这个参数是用来指定有关的每一个维度的名字的,其中第一个维度的两行分别为male和female,第二个维度的两个分别为apple、banana和pear。
讲到这里,需要提出来的是,一维数组跟向量很相近,二维数组就是矩阵。但是一维数组跟向量在某些函数的处理过程中会有区别的对待,如str函数:
> x = array(rpois(2,10),dim=c(1,2),dimnames=list(c("apple"),c("male","female"))) > str(x) int [1, 1:2] 8 15 - attr(*, "dimnames")=List of 2 ..$ : chr "apple" ..$ : chr [1:2] "male" "female" > y = as.vector(x) > str(y) int [1:2] 8 15
那么既然提到了向量和矩阵,那么我们来看看常用的定义向量和矩阵是如何定义的。
矩阵:
vector(mode = "logical", length = 0)
这里,mode参数表示的是该向量储存数据的类型,length表示该向量的长度。
矩阵:
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)
这里data是该向量要储存的数据,nrow和ncol,顾名思义是指这个矩阵有多少行和多少列,需要指出的是,data的个数需要等于nrow乘以ncol。byrow表示数据是否以行的方式进行排列,我们会在下面的例子中阐述。dimnames与array中的dimnames一致。
> x = matrix(data=1:6,nrow=2,ncol=3,byrow=T) > x [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 > x = matrix(data=1:6,nrow=2,ncol=3,byrow=F) > x [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6
在这个例子可以发现,是否按行排列会对数据结构产生很大的影响,所以在使用过程需要特别注意。
第二种:列表。
列表是R语言中使用非常广泛的一种结构,他的主要特点就是不对齐的数据格式。是用list函数进行创建。
例如:
> x = list(fruit=c("apple","banana","pear"),price=c(1,1,1.5),market=c("newabest")) > x $fruit [1] "apple" "banana" "pear" $price [1] 1.0 1.0 1.5 $market [1] "newabest"
在这里,我们可以看到,这个列表包含3个槽,第一个是fruit,它储存的是字符型,长度为3。第二个是price,储存的是数值型,长度为3,第三个是market,储存的是字符型,长度为1。也就是说,我们可以在一个列表中储存不同的类型数据,还可以储存不同的长度数据,每一个插槽中都是一个向量(vector)。我们可以直接使用x$fruit来调用数据。
第三种:数据框。
数据框实际上是一种非常实用的数据结构。它实际上是一个表,这个表的列与列之间可以储存不同的数据类型,但是同一列必须是同一种数据结构。如:
> fruit=c("apple","banana","pear") > price=c(1,1,1.5) > buy=c(T,F,F) > x=data.frame(fruit,price,buy) > x fruit price buy 1 apple 1.0 TRUE 2 banana 1.0 FALSE 3 pear 1.5 FALSE
同样的,我们可以使用x$fruit、x$price和x$buy来调用这三列数据。
转载请注明:数据分析 » R语言 常用数据结构_R语言培训