索引:访问向量中元素的方法
1.正负整数索引:根据元素在集合中的位置进行访问
2.逻辑向量索引
3.名称索引
1.正负数索引
> x <- (1:100)
> x
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13
[14] 14 15 16 17 18 19 20 21 22 23 24 25 26
[27] 27 28 29 30 31 32 33 34 35 36 37 38 39
[40] 40 41 42 43 44 45 46 47 48 49 50 51 52
[53] 53 54 55 56 57 58 59 60 61 62 63 64 65
[66] 66 67 68 69 70 71 72 73 74 75 76 77 78
[79] 79 80 81 82 83 84 85 86 87 88 89 90 91
[92] 92 93 94 95 96 97 98 99 100
> length(x) #X中有100个元素
[1] 100
> x[1] #访问X中的第一个元素,R中第一个是从1 开始而不是从0开始
[1] 1
> x[0] #0不是正整数无法访问
integer(0)
> x[-19] #访问除了-19 的其他元素
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13
[14] 14 15 16 17 18 20 21 22 23 24 25 26 27
[27] 28 29 30 31 32 33 34 35 36 37 38 39 40
[40] 41 42 43 44 45 46 47 48 49 50 51 52 53
[53] 54 55 56 57 58 59 60 61 62 63 64 65 66
[66] 67 68 69 70 71 72 73 74 75 76 77 78 79
[79] 80 81 82 83 84 85 86 87 88 89 90 91 92
[92] 93 94 95 96 97 98 99 100
> x[c(4:18)] #访问4到18号元素
[1] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
> x[c(1,23,45,67,89)] #访问第1,23,45,67,89元素
[1] 1 23 45 67 89
> x[c(11,11,23,23,4,90,2)] #可重复且不用按顺序索引
[1] 11 11 23 23 4 90 2
> x[c(-2,3,4)] #不能同时用正数负数索引,逻辑不通
Error in x[c(-2, 3, 4)] : 只有负下标里才能有零
2.逻辑向量索引:相当于if条件语句
> y <- c(1:10) #定义y向量为1到10
> y
[1] 1 2 3 4 5 6 7 8 9 10
> y[c(T,F,T,F,T,F,T,F,T,F)]
[1] 1 3 5 7 9
> y[c(T)] #默认全部为true
[1] 1 2 3 4 5 6 7 8 9 10
> y[c(F)] #默认全部为false
integer(0)
> y[c(T,F)] #以TF,TF,TF,TF,TF....的顺序展示元素
[1] 1 3 5 7 9
> y[c(T,F,F)] #以TFF,TFF,TFF....的顺序展示元素
[1] 1 3 5 7 9
[1] 1 4 7 10
> y[c(T,F,T,F,T,F,T,F,T,F,T)] #第十一个是空的
[1] 1 3 5 7 9 NA
> y[y>5]
[1] 6 7 8 9 10
> y[y>5 & y<9] #y>5和y<9
[1] 6 7 8
> z <- c("one","two","three","four","five")
> z
[1] "one" "two" "three" "four" "five"
> "one" %in% z #"one"是否在向量z中
[1] TRUE
> z["one" %in% z] #"one"是否在向量z中---True 相当于z[TRUE]
[1] "one" "two" "three" "four" "five"
> z[z %in% c("one","two")]
[1] "one" "two"
> z %in% c("one","two")
[1] TRUE TRUE FALSE FALSE FALSE
> k <- z %in% c("one","two")
> z[k]
[1] "one" "two"
3.名称索引
> names(y)
NULL
> names(y) <- c("one","two","three","four","five","six","seven","eight","nine","ten")
> y
one two three four five six seven eight nine #name属性
1 2 3 4 5 6 7 8 9 #name属性值称为value
ten
10
可以通过每个元素的name访问name属性值(一一对应)
> euro #访问向量中的名称属性
ATS BEF DEM ESP FIM FRF
13.760300 40.339900 1.955830 166.386000 5.945730 6.559570
IEP ITL LUF NLG PTE
0.787564 1936.270000 40.339900 2.203710 200.482000
> euro["ATS"] #使用每个元素名称访问元素的值
ATS
13.7603
> y["one"]
one
1
4增加或删除元素
> x[101] <- 101 #增加1个元素
> v[c(4,5,6)] <- c(4,5,6) #增加多个元素
> v
[1] 1 2 3 4 5 6
> v[20] <- 4 #在第20位增加一个元素,中间的为NA
> v
[1] 1 2 3 4 5 6 NA NA NA NA NA NA NA NA NA NA NA NA NA 4
> append(x=v,value=99,after=5) #用append函数在向量中间插入值,在5位后也就是6位处插入值
[1] 1 2 3 4 5 99 6 NA NA NA NA NA NA NA NA NA NA NA NA NA 4
> append(x=v,value=99,after=0) #用append函数在向量中间插入值,在0位后也就是1位处插入值
[1] 99 1 2 3 4 5 6 NA NA NA NA NA NA NA NA NA NA NA NA NA 4
> rm(v) #删除向量v
> v
错误: 找不到对象'v'
> y[-c(1:3)] #删除y向量中的1到3位元素
four five six seven eight nine ten
4 5 6 7 8 9 10
> y <- y[-c(1:3)]#删除y向量中的1到3位元素并将值重新赋给y
> y
four five six seven eight nine ten
4 5 6 7 8 9 10
> y["four"] <- 100 #将four的值赋为100
> y
four five six seven eight nine ten
100 5 6 7 8 9 10
> y[2] <- 15将2位的值赋为15
> y
four five six seven eight nine ten
100 15 6 7 8 9 10
> y[2] <- "one" 5将2位的值赋为"one",则整个向量变成字符型向量
> y
four five six seven eight nine ten
"100" "one" "6" "7" "8" "9" "10"
>