目录
1.正整数下标
2.负整数下标
3.空下标与零下标
4.下标超界
5.逻辑下标
6. which()、which.min()、which.max() 函数
7. 元素名
8.用 R 向量下标作映射
9.集合运算
练习
1.正整数下标
首先定义一个x,然后对向量 x, 在后面加方括号和下标可以访问向量的元素和子集,如:
定义一个x:
x <- c(1, 4, 6.25)
x
返回:
我们取出第二个元素:
x[2]
返回:
我们再修改第二个元素为 99 :
x[2] <- 99; x
返回:
我们再取下第 1、3 号元素 :
x[c(1,3)]
返回:
我们再修改第 1、3 号元素为 11,13 :
x[c(1,3)] <- c(11, 13); x
返回:
若是下标可重复,又会如何,如:
x[c(1,3,1)]
返回:
2.负整数下标
负下标表示扣除相应的元素后的子集,如
x <- c(1,4,6.25)
x[-2]
-2 表示倒数第二个;返回:
再比如:
x[-c(1,3)]
返回:
负整数下标不能与正整数下标同时用来从某一向量中取子集,比如
x[c(1,-2)]
返回结果会报错:
3.空下标与零下标
x <- c(1,4,6.25)
x[]
返回:
然后,我们对x 内的值进行修改
x[] <- 999
x
返回:
再如,另一种对x内的值进行修改
x <- c(1,4,6.25)
x <- 999
x
返回结果只有一个值:
可能有人会问是否有 x[0] ,那就让我们看看
x[0]
返回:
那说明,x[0] 是一种少见的做法,结果返回类型相同、长度为零的向量,如 numeric(0)。
4.下标超界
x <- c(1,4,6.25)
x[2]
返回:
x[5]
返回:
x[5] <- 9
x
返回:
5.逻辑下标
x <- c(1,4,6.25)
x[x > 3]
返回:
f <- function(x){
y <- numeric(length(x))
y[x >= 0] <- 1
y[x < 0] <- 0 # 此语句多余
y }
y <- ifelse(x>=0, 1, 0)
x <- c(1, 4, 6.25, NA)
x[x > 2]
返回:
x[!is.na(x) & x > 2]
返回:
6. which()、which.min()、which.max() 函数
x <- c(3, 4, 3, 5, 7, 5, 9)
which(x > 5)
返回:
seq(along=x) 会生成由 x 的下标组成的向量,如
seq(along=x)[x > 5]
返回:
which.min(x)
which.max(x)
返回:
7. 元素名
ages <- c(" 李明"=30, " 张聪"=25, " 刘颖"=28)
或
ages <- c(30, 25, 28)
names(ages) <- c(" 李明", " 张聪", " 刘颖")
或
ages <- setNames(c(30, 25, 28), c(" 李明", " 张聪", " 刘颖"))
ages[" 张聪"]
返回:
再如:
ages[c(" 李明", " 刘颖")]
返回:
再如,修改字符串数值:
ages[" 张聪"] <- 26
sex <- c(" 李明"=" 男", " 张聪"=" 男", " 刘颖"=" 女")
8.用 R 向量下标作映射
price.map <- c(68, 88, 168)
items <- c(3,2,1,1,2,2,3)
y <- price.map[items]
print(y)
返回:
sex <- c(" 男", " 男", " 女", " 女", " 男", " 女", " 女", " 女", " 女", " 男")
sex.color <- c(' 男'='blue', ' 女'='red')
cols <- sex.color[sex]; print(cols)
返回:
unname(cols)
返回:
9.集合运算
unique(c(1, 5, 2, 5))
返回:
用 a %in% x 判断 a 的每个元素是否属于向量 x,如
5 %in% c(1,5,2)
返回:
c(5,6) %in% c(1,5,2)
返回
一个数值判断:
match(5, c(1,5,2))
返回:
若所匹配集合有重复元素,则返回为第一个元素的下标:
match(5, c(1,5,2,5))
返回:
若匹配两个元素的所属呢?
match(c(2,5), c(1,5,2,5))
返回:
若所匹配元素中,有集合中没有的呢?则返回空值,如
match(c(2,5,0), c(1,5,2,5))
返回:
用 intersect(x,y) 求交集,结果中不含重复元素,如
intersect(c(5, 7), c(1, 5, 2, 5))
返回:
union(c(5, 7), c(1, 5, 2, 5))
setdiff(c(5, 7), c(1, 5, 2, 5))
返回:
用 setequal(x,y) 判断两个集合是否相等,不受次序与重复元素的影响,如
setequal(c(1,5,2), c(2,5,1))
再如
setequal(c(1,5,2), c(2,5,1,5))
返回: