8.向量的索引

索引:访问向量中元素的方法
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" 
> 

你可能感兴趣的:(8.向量的索引)