1.2 数据结构的索引

1.2 数据结构的索引

1.2.1 问题

你想获得数据结构的一部分。

1.2.2 方案

可以使用数字索引或通过使用适当长度的布尔向量来提取向量、矩阵或数据框中的元素。以下例子中使用了多种方式来解决这一问题。

1.2.2.1 使用数字和名称进行索引

对于向量

## 样本向量
v <- c(1, 4, 4, 3, 2, 2, 3)
v[c(2, 3, 4)]
#> [1] 4 4 3
v[2:4]
#> [1] 4 4 3
v[c(2, 4, 3)]
#> [1] 4 3 4

对于数据框:

## 创建样本数据框
data <- read.table(header = T, text = "
 subject sex size
     1   M    7
     2   F    6
     3   F    9
     4   M   11
 ")

## 获取位于第一行第三列的元素
data[1, 3]
#> [1] 7
data[1, "size"]
#> [1] 7

## 获取第1行和第2行所有列上的元素
data[1:2, ]
#>   subject sex size
#> 1       1   M    7
#> 2       2   F    6
data[c(1, 2), ]
#>   subject sex size
#> 1       1   M    7
#> 2       2   F    6

## 获取一,二两行第二列上的元素
data[1:2, 2]
#> [1] M F
#> Levels: F M
data[c(1, 2), 2]
#> [1] M F
#> Levels: F M

## 获取行1和2,名为“sex”和 'size'的列
data[1:2, c("sex", "size")]
#>   sex size
#> 1   M    7
#> 2   F    6
data[c(1, 2), c(2, 3)]
#>   sex size
#> 1   M    7
#> 2   F    6

1.2.2.2 使用布尔向量进行索引

向量 v 同上。

v > 2
#> [1] FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE
v[v > 2]
#> [1] 4 4 3 3
v[c(F, T, T, T, F, F, T)]
#> [1] 4 4 3 3

数据框同上。

## 一个布尔向量
data$subject < 3
#> [1]  TRUE  TRUE FALSE FALSE
data[data$subject < 3, ]
#>   subject sex size
#> 1       1   M    7
#> 2       2   F    6
data[c(TRUE, TRUE, FALSE, FALSE), ]
#>   subject sex size
#> 1       1   M    7
#> 2       2   F    6
## 也可以获取TRUE的数字索引
which(data$subject < 3)
#> [1] 1 2

1.2.2.3 负索引

与其他某些编程语言不同,当您在 R 中使用负数进行索引时,并不意味着从后向前索引。相反,它意味着按照通常的从前往后顺序删除索引中的元素。

## 还是这个向量
v
#> [1] 1 4 4 3 2 2 3

## 删除第一个
v[-1]
#> [1] 4 4 3 2 2 3

## 删除前三个
v[-1:-3]
#> [1] 3 2 2 3

## 只删除最后一个
v[-length(v)]
#> [1] 1 4 4 3 2 2