下标和子集
-
在 [] 中填入下标,返回对应下标的子集
###正整数下标 > x <- c(1, 4, 6.25) > x[2] [1] 4 > x[1:3] #取1到3位 [1] 1.00 4.00 6.25 > x[c(1,3)] #取第1位和第3位 [1] 1.00 6.25 > x[c(1,3,1)] [1] 1.00 6.25 1.00 ###负整数下标,删除 > x[-c(1,3)] [1] 4 ###空下标,取x的全部元素作为子集 > x[] <- 999 > x [1] 999 999 999
-
在 [] 中填入条件,返回满足条件的子集
> x <- c(1, 4, 6.25) > x[x > 3] [1] 4.00 6.25 > x[x==6.25] [1] 6.25 > x[x %in% c(1,3)] #x与1,3的交集 [1] 1
-
取值,再赋值,实现修改
> x <- c(1, 4, 6.25) > x[2] <- 3.02 > x [1] 1.00 3.02 6.25
数据结构
向量:一维,只有长度
matrix矩阵:多个长度相同,数据类型相同的向量
data.frame数据框:多个长度相同,数据类型可以不同的向量
list列表:数据长度可以不同,数据类型也可以不同
--生信技能树团队
矩阵
使用matrix()生成矩阵
语法:
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)
data 放数据
nrow 行数
ncol 列数
byrow = FALSE 默认存储次序为按列存储,即先写满第一列,再写第二列。True则是按行储存
dimnames 名字
示例:
> A <- matrix(11:16, nrow=3, ncol=2) #去掉ncol=2是一样的,可以由nrow=3算出来
> print(A) #默认按列排布
[,1] [,2]
[1,] 11 14
[2,] 12 15
[3,] 13 16
> B <- matrix(11:16, nrow=3, ncol=2,byrow = TRUE)
> print(B) #按行排布
[,1] [,2]
[1,] 11 12
[2,] 13 14
[3,] 15 16
> nrow(A)#行数
[1] 3
> ncol(A)#列数
[1] 2
> dim(A)#几行几列
[1] 3 2
###因为矩阵需要长度相同,所以当无法做到‘整齐的队列’时,会报警告
> m <- matrix(11:17, nrow=3, ncol=2)
Warning message:
In matrix(11:17, nrow = 3, ncol = 2) :
data length [7] is not a sub-multiple or multiple of the number of rows [3]#不是倍数
##储存的只有6个数
> m
[,1] [,2]
[1,] 11 14
[2,] 12 15
[3,] 13 16
> colnames(A) <- c('a','b')#命名列名
> print(A)
a b
[1,] 11 14
[2,] 12 15
[3,] 13 16
> rownames(A) <- 1:3#命名行名
> print(A)
a b
1 11 14
2 12 15
3 13 16
###使用 【】 取子集,左行右列,[]里面放子集的下标或者行名列名
> A[1,]#取第一行
a b
11 14
> A[,1]#取第一列
1 2 3
11 12 13
> A[c(1,3), 1:2]#取第1和第3行的1-2列
a b
1 11 14
3 13 16
> A[2,2]#坐标定位单个格
[1] 15
> A[c(1,3,5)]#这里取出第1个,第3个,第5个元素。可以理解成矩阵本质上是一个向量添加了dim属性, 实际保存还是保存成一个向量, 其中元素的保存次序是按列填入
[1] 11 13 15
###也可以使用逻辑下标取子集
> print(A)
a b
1 11 14
2 12 15
3 13 16
> A[A[,1]>=2,'b'] #首先满足第一列中大于等于2的行--都满足,其次满足在b列中,所以b列都显示
1 2 3
14 15 16
> A[A[,1]>=15,'b']#首先满足第一列中大于等于2的行--都不满足,其次满足在b列中,所以 空
integer(0)
> A[A[,1]>=13,'b']#首先满足第一列中大于等于13的行--第三行,其次满足在b列中,即坐标(3,b)
[1] 16
> A[A[,1]>=2,'a']#同理
1 2 3
11 12 13
> A[A[,1]>=12,'a']#首先满足第一列中大于等于12的行--第二、三行,其次满足在b列中
2 3
12 13
注意在对矩阵取子集时, 如果取出的子集仅有一行或仅有一列, 结果就不再是矩阵而是变成了R向量, R向量既不是行向量也不是列向量。 如果想避免这样的规则起作用, 需要在方括号下标中加选项
drop=FALSE
--R语言教程
> A[,1,drop=FALSE]#取第一列
a
1 11
2 12
3 13
网友评论