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的数据结构的主要内容,如果未能解决你的问题,请参考以下文章

需要对特定 R 代码片段的解释

有人可以解释以下 R 代码片段吗? [关闭]

如何将 r ggplot 图存储为 html 代码片段

sql [SQL查询片段]用于在命令行或通过R和其他工具使用SQL的快速代码段#tags:sql,R,text processing,命令li

关于代码片段的时间复杂度

Android 动画嵌套片段