当前位置:   article > 正文

R语言基础 | 使用中括号“[]”提取或替换数据

r语言[]

专注系列化、高质量的R语言教程

(查看推文索引


中括号[]R语言的一个常用操作符,作用是提取(extract)或替换(replace)。本篇推文总结其三种用法:

  • 1 使用下标或名称

  • 2 使用逻辑变量

  • 3 使用重复序数

1 使用下标或名称

在推文R语言的原子类型和数据结构中,学堂君介绍了五种基本数据结构都可以使用中括号[]来提取(查询)、替换元素。

以数据框为例,中括号内可以使用行、列的下标或名称:

  1. mtcars[1:5,1:3
  2. ##                    mpg cyl disp
  3. ## Mazda RX4         21.0   6  160
  4. ## Mazda RX4 Wag     21.0   6  160
  5. ## Datsun 710        22.8   4  108
  6. ## Hornet 4 Drive    21.4   6  258
  7. ## Hornet Sportabout 18.7   8  360
  8. mtcars[1:5, c("mpg""disp""cyl")] 
  9. ##                    mpg disp cyl
  10. ## Mazda RX4         21.0  160   6
  11. ## Mazda RX4 Wag     21.0  160   6
  12. ## Datsun 710        22.8  108   4
  13. ## Hornet 4 Drive    21.4  258   6
  14. ## Hornet Sportabout 18.7  360   8

对于数据框而言,如果使用单索引指的是列:

  1. mtcars[1:3
  2. ##                      mpg cyl  disp
  3. ## Mazda RX4           21.0   6 160.0
  4. ## Mazda RX4 Wag       21.0   6 160.0
  5. ## Datsun 710          22.8   4 108.0
  6. ## Hornet 4 Drive      21.4   6 258.0
  7. ## Hornet Sportabout   18.7   8 360.0

对于矩阵而言,如果使用单索引,1表示其第一列第一行的元素,2表示其第一列第二行的元素,3表示其第一列第三行的元素;第一列数完后则从第二列第一行开始继续数,依次类推。例如:

  1. mat <- as.matrix(mtcars)
  2. mat[1:3]
  3. ## [121.0 21.0 22.8

2 使用逻辑变量

这种方法仅适用于行的提取或替换,逻辑变量的长度需要与数据的行数一致

  1. x <- c(1,1, rep(030))
  2. x
  3. ##  [11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  4. mtcars[x,] 
  5. ##             mpg cyl disp  hp drat   wt  qsec vs am gear carb
  6. ## Mazda RX4    21   6  160 110  3.9 2.62 16.46  0  1    4    4
  7. ## Mazda RX4.1  21   6  160 110  3.9 2.62 16.46  0  1    4    4

x中只有前两个元素为1(对应逻辑值TRUE),则表示提取数据的前两行。

其拓展形式是使用逻辑判定式(结果也是逻辑变量):

  1. mtcars$mpg > 25
  2. ##  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
  3. ## [13] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
  4. ## [25] FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
  5. mtcars[mtcars$mpg > 25,] 
  6. ##                 mpg cyl  disp  hp drat    wt  qsec vs am gear carb
  7. ## Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
  8. ## Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
  9. ## Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
  10. ## Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
  11. ## Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
  12. ## Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2

3 使用重复序数

这种用法不太常见,主要用于替换,学堂君认为这算是R语言基础的一个隐藏技巧。

生成一个由重复序数组成的向量作为索引:

  1. set.seed(1030)
  2. x <- sample(1:332, replace = T)
  3. x  
  4. ##  [12 1 2 3 2 2 1 2 1 3 3 2 1 2 1 1 3 1 3 1 2 1 3 1 1 1 3 2 3 1 2 2
  5. c(-101)[x] 
  6. ##  [1]  0 -1  0  1  0  0 -1  0 -1  1  1  0 -1  0 -1 -1  1 -1  1 -1  0 -1  1 -1 -1
  7. ## [26-1  1  0  1 -1  0  0
  8. c("good""better""best")[x]
  9. ##  [1"better" "good"   "better" "best"   "better" "better" "good"   "better"
  10. ##  [9"good"   "best"   "best"   "better" "good"   "better" "good"   "good"  
  11. ## [17"best"   "good"   "best"   "good"   "better" "good"   "best"   "good"  
  12. ## [25"good"   "good"   "best"   "better" "best"   "good"   "better" "better"

例1:生成一个变量用于标记每行数据对应的mpg变量的四分位数

  1. data <- mtcars
  2. y <- cut(data$mpg, breaks = quantile(data$mpg), include.lowest = T) 
  3. y <- as.numeric(y) 
  4. y
  5. ##  [12 1 2 3 2 2 1 2 1 3 3 2 1 2 1 1 3 1 3 1 2 1 3 1 1 1 3 2 3 1 2 2
  6. data$Q <- c("Q1""Q2""Q3""Q4")[y]
  7. data$Q
  8. ##  [1"Q2" "Q1" "Q2" "Q3" "Q2" "Q2" "Q1" "Q2" "Q1" "Q3" "Q3" "Q2" "Q1" "Q2" "Q1"
  9. ## [16"Q1" "Q3" "Q1" "Q3" "Q1" "Q2" "Q1" "Q3" "Q1" "Q1" "Q1" "Q3" "Q2" "Q3" "Q1"
  10. ## [31"Q2" "Q2"

例2:已知前面的随机变量x中的元素只包含1、2、3。生成一个变量:当x = 1时它取mpg的值;当x = 2时,它取cyl的值;当x = 3时,它取disp的值。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/202232
推荐阅读
相关标签
  

闽ICP备14008679号