R的数据结构
Posted zm-pop-pk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R的数据结构相关的知识,希望对你有一定的参考价值。
R可处理的数据类型(模式)包括数值型、字符型、逻辑型、复数型、原生型(字节),存储数据的结构包括标量、向量、矩阵、数组、数据框、列表。
1.向量
向量是一维数组,其中的元素必须是相同的类型。
1.1 向量的创建
1 a <- c(1,2,3,4,5) 2 b <- c(‘one‘,‘two‘)
1.2 向量的索引
从0开始,而不是从1开始。
1 > a <- c(1,2,3,4,5) 2 > a[3] 3 [1] 3 4 > a[1:3] 5 [1] 1 2 3
2.矩阵
矩阵是一个二维数组,其中的元素也都拥有相同的模式。
2.1 矩阵的创建
默认按列进行填充。
1 > cells <- c(1,4,6,9,3,5) 2 > rnames <- c(‘R1‘,‘R2‘) 3 > cnames <- c(‘C1‘,‘C2‘,‘C3‘) 4 > m <- matrix(cells,nrow = 2,ncol = 3,byrow = T,dimnames = list(rnames,cnames)) 5 > m 6 C1 C2 C3 7 R1 1 4 6 8 R2 9 3 5
2.2 矩阵的索引
1 > m 2 C1 C2 C3 3 R1 1 4 6 4 R2 9 3 5 5 > m[1,2] 6 [1] 4 7 > m[1,] 8 C1 C2 C3 9 1 4 6 10 > m[1,c(2,3)] 11 C2 C3 12 4 6 13 > m[c(1,2),c(2,3)] 14 C2 C3 15 R1 4 6 16 R2 3 5
3.数组
数组的维度可以大于2,只能包含相同模式的元素。当维度为2时,数组退化成矩阵;当维度为1时,数组退化成向量。
3.1 数组的创建和索引
创建数组时需要定义每个维度的大小。
1 > dim1<-c(‘A1‘,‘A2‘) 2 > dim2<-c(‘B1‘,‘B2‘,‘B3‘) 3 > dim3<-c(‘C1‘,‘C2‘,‘C3‘,‘C4‘) 4 > z<-array(1:24,dim = c(2,3,4),dimnames = list(dim1,dim2,dim3)) 5 > z 6 , , C1 7 8 B1 B2 B3 9 A1 1 3 5 10 A2 2 4 6 11 12 , , C2 13 14 B1 B2 B3 15 A1 7 9 11 16 A2 8 10 12 17 18 , , C3 19 20 B1 B2 B3 21 A1 13 15 17 22 A2 14 16 18 23 24 , , C4 25 26 B1 B2 B3 27 A1 19 21 23 28 A2 20 22 24 29 30 > z[1,2,3] 31 [1] 15
4.数据框
向量、矩阵、数组都要求其中的数据是相同的模式;而在数据框中,不同的列可以包含不同模式的数据,每一列的数据模式要相同。
4.1 数据框的创建
1 > patientID<-c(1,2,3,4) 2 > age<-c(25,34,28,52) 3 > diabetes<-c(‘type1‘,‘type2‘,‘type3‘,‘type4‘) 4 > status<-c(‘poor‘,‘improved‘,‘excellent‘,‘poor‘) 5 > patientdata<-data.frame(patientID,age,diabetes,status) 6 > patientdata 7 patientID age diabetes status 8 1 1 25 type1 poor 9 2 2 34 type2 improved 10 3 3 28 type3 excellent 11 4 4 52 type4 poor
4.2 选取数据框中的元素
1 > patientdata 2 patientID age diabetes status 3 1 1 25 type1 poor 4 2 2 34 type2 improved 5 3 3 28 type1 excellent 6 4 4 52 type1 poor 7 > #方式1:使用索引 8 > patientdata[1,2] 9 [1] 25 10 > patientdata[1:2] 11 patientID age 12 1 1 25 13 2 2 34 14 3 3 28 15 4 4 52 16 > #方式2:使用变量的名称 17 > patientdata[c(‘diabetes‘,‘status‘)] 18 diabetes status 19 1 type1 poor 20 2 type2 improved 21 3 type1 excellent 22 4 type1 poor 23 > #方式3:使用$ 24 > patientdata$age 25 [1] 25 34 28 52 26 > #生成diabetes和status的列联表 27 > table(patientdata$diabetes,patientdata$status) 28 29 excellent improved poor 30 type1 1 0 2 31 type2 0 1 0
4.3 attach()、detach()
attach()将数据框添加到R的搜索路径中,detach()将数据框从搜索路径中移除。
1 > #使用$ 2 > summary(mtcars$mpg) 3 Min. 1st Qu. Median Mean 3rd Qu. Max. 4 10.40 15.43 19.20 20.09 22.80 33.90 5 > plot(mtcars$mpg,mtcars$disp) 6 > plot(mtcars$mpg,mtcars$wt) 7 8 > #使用attach()、detach() 9 > attach(mtcars) 10 > summary(mpg) 11 Min. 1st Qu. Median Mean 3rd Qu. Max. 12 10.40 15.43 19.20 20.09 22.80 33.90 13 > plot(mpg,disp) 14 > plot(mpg,wt) 15 > detach(mtcars)
画出的图形为:
4.4 with()
with()是一种更好的方式。
1 > with(mtcars,{ 2 + print(summary(mpg)) 3 + plot(mpg,disp) 4 + plot(mpg,wt) 5 + }) 6 Min. 1st Qu. Median Mean 3rd Qu. Max. 7 10.40 15.43 19.20 20.09 22.80 33.90
4.5 实例标识符
以patientID区分不同的个体,通过rowname指定。
1 > patientdata <- data.frame(patientID,age,diabetes,status,row.names = patientID)
5.因子
以上是关于R的数据结构的主要内容,如果未能解决你的问题,请参考以下文章
sql [SQL查询片段]用于在命令行或通过R和其他工具使用SQL的快速代码段#tags:sql,R,text processing,命令li