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.因子
类别变量分为名义变量和有序类别变量,它们都称为因子。它决定了数据的分析方式。factor()函数用一个整数向量来存储类别变量。
5.1 名义变量
将diabetes变量存储为(1,2,1,1),内部关联为1=type1,2=type2。
1 > #类别变量
2 > diabetes<-c('type1','type2','type1','type1')
3 > diabetes<-factor(diabetes)
4 > diabetes
5 [1] type1 type2 type1 type1
6 Levels: type1 type2
5.2 有序变量
需要为factor()函数指定参数order=T,指定levels参数,覆盖默认排序。
1 > #有序类别变量
2 > status<-c('poor','improved','excellent','poor')
3 > status<-factor(status,ordered = T,levels = c('poor','improved','excellent'))
4 > status
5 [1] poor improved excellent poor
6 Levels: poor < improved < excellent
5.3 数值型变量
用levels和labels参数可以讲数值型变量编码因子。如将1指定为男,2指定为女,非1、2的为缺失值。
1 > sex<-c(1,2,2,1,3)
2 > sex<-factor(sex,levels = c(1,2),labels = c('male','female'))
3 > sex
4 [1] male female female male <NA>
5 Levels: male female
5.4 因子的使用
对于因子,R的统计概要会显示各水平(level)的频数。
1 > #输入数据
2 > patientID<-c(1,2,3,4)
3 > age<-c(25,34,28,52)
4 > diabetes<-c('type1','type2','type1','type1')
5 > status<-c('poor','improved','excellent','poor')
6
7 > #因子
8 > diabetes<-factor(diabetes)
9 > status<-factor(status,ordered = T)
10
11 > #数据框
12 > patientdata<-data.frame(patientID,age,diabetes,status)
13
14 > #显示结构
15 > str(patientdata)
16 'data.frame': 4 obs. of 4 variables:
17 $ patientID: num 1 2 3 4
18 $ age : num 25 34 28 52
19 $ diabetes : Factor w/ 2 levels "type1","type2": 1 2 1 1
20 $ status : Ord.factor w/ 3 levels "excellent"<"improved"<..: 3 2 1 3
21
22 > #统计概要
23 > summary(patientdata)
24 patientID age diabetes status
25 Min. :1.00 Min. :25.00 type1:3 excellent:1
26 1st Qu.:1.75 1st Qu.:27.25 type2:1 improved :1
27 Median :2.50 Median :31.00 poor :2
28 Mean :2.50 Mean :34.75
29 3rd Qu.:3.25 3rd Qu.:38.50
30 Max. :4.00 Max. :52.00
6.列表
列表中的元素可以是向量、矩阵、数据框、列表。
Mylist有4个成分:一个字符串、一个数值型向量、一个矩阵、一个字符型向量。
1 > g<-'My first list'
2 > h<-c(25,26,18,39)
3 > j<-matrix(1:10,nrow = 5)
4 > k<-c('one','two','three')
5
6 > #创建列表
7 > mylist<-list(title=g,ages=h,j,k)
8 > mylist
9 $title
10 [1] "My first list"
11
12 $ages
13 [1] 25 26 18 39
14
15 [[3]]
16 [,1] [,2]
17 [1,] 1 6
18 [2,] 2 7
19 [3,] 3 8
20 [4,] 4 9
21 [5,] 5 10
22
23 [[4]]
24 [1] "one" "two" "three"
25
26
27 > #输出第二个成分
28 > mylist[[2]]
29 [1] 25 26 18 39
30 > mylist[['ages']]
31 [1] 25 26 18 39
来源:https://www.cnblogs.com/zm-pop-pk/p/11594833.html