数组(array)
数组是k维的数据表。向量(n=1),矩阵(n=2),高维数组(n>=3)
矩阵的生成及基本操作
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,
dimnames = NULL):
data可以为一个向量,nrow/ncol为指定生成的行数和列数,byrow:设定向量排布成指定的行数和列数时,按照行排列,默认是按列排布。dimnames:设定行名和列名。
colnames()/rownames():与向量的names函数作用类似,赋值可以设定行名和列名。
ncol()/nrow():显示矩阵的行数和列数
dim():返回行数、列数的含有两个元素的向量。
###创建矩阵
> A <- matrix(1:6, nrow=3, ncol=2)
> A
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> B <- matrix(1:6, nrow=3, ncol=2,byrow=T)
> B
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
###给矩阵添加行名和列名
> colnames(A) <- c('X', 'Y')
> rownames(A) <- c('a', 'b', 'c')
> A
X Y
a 1 4
b 2 5
c 3 6
###显示行列数目的函数
> nrow(A)
[1] 3
> ncol(A)
[1] 2
> dim(A)
[1] 3 2
> dim(A)[1]#dim():返回行数、列数的含有两个元素的向量
[1] 3
> dim(A)[2]
[1] 2
索引矩阵中想要的元素
> A
X Y
a 1 4
b 2 5
c 3 6
> A[1,1]
[1] 1
> A[1,]
X Y
1 4
> A[,1]
a b c
1 2 3
> A[c(1,3), 1:2]#同向量索引,不过用[,]索引
X Y
a 1 4
c 3 6
> A[,'Y']#根据名称索引,与位置索引一致
a b c
4 5 6
> A['b',]
X Y
2 5
> A[c('a', 'c'), 'Y']
a c
4 6
cbind()和bind()函数
cbind()和rind():按行或列合并,注意合并时对应的行数和列数要与原数组相等。
> A
X Y
a 1 4
b 2 5
c 3 6
> cbind(c(1,2), c(3,4), c(5,6))
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> cbind(A, c(7,8,9))
X Y
a 1 4 7
b 2 5 8
c 3 6 9
> rbind(A,c(8,8))
X Y
a 1 4
b 2 5
c 3 6
8 8
> D=rbind(A,c(8,8))
> rownames(D)[4]="d"#rownames()返回行名的一个向量,用赋值的方法修改行名
> D
X Y
a 1 4
b 2 5
c 3 6
d 8 8
应用:apply()函数对行列进行统计运算,如均值和标准误
tapply()函数是apply()函数的一种,apply()函数的应用方式与之相似,tapply()函数是对按照因子分类的向量进行统计运算,apply()函数是按行列进行统计运算。
> A
X Y
a 1 4
b 2 5
c 3 6
> apply(A,2,mean)
X Y
2 5
> apply(A,1,mean)
a b c
2.5 3.5 4.5
> stderr <- function(x) sqrt(var(x)/length(x))
> apply(A,1,stderr)
a b c
1.5 1.5 1.5