跳到主要内容

R语言矩阵

提示
  1. R语言中的矩阵定义和创建:矩阵是R语言中的一种二维数据结构,用于存储数据,可通过matrix()函数创建。
  2. 访问和修改矩阵元素:使用索引[n1, n2]访问和修改矩阵的特定元素,其中n1n2分别表示行和列的位置。
  3. 组合和检查矩阵中的元素:可使用cbind()rbind()函数将矩阵按列或行组合,%in%操作符用于检查特定元素是否存在于矩阵中。

矩阵是一种二维数据结构,其中数据被排列成行和列。例如,

矩阵将数据排列成行和列

这里,上面的矩阵是 3 * 3(读作“三乘三”)矩阵,因为它有 3 行和 3 列。

在 R 中创建矩阵

在 R 中,我们使用 matrix() 函数来创建矩阵。

matrix() 函数的语法为

matrix(vector, nrow, ncol)

这里,

  • vector - 相同类型的数据项
  • nrow - 行数
  • ncol - 列数
  • byrow(可选) - 如果为 TRUE,则矩阵按行填充。默认情况下,矩阵按列填充。

让我们看一个例子,

# 创建一个 2 行 3 列的矩阵
matrix1 <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3, byrow = TRUE)

print(matrix1)

输出

    [,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6

在上面的例子中,我们使用 matrix() 函数创建了一个名为 matrix1 的矩阵。

matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3, byrow = TRUE)

这里,我们传递了整数类型的数据项,并使用 c() 将数据项组合在一起。并且 nrow = 2ncol = 3 表示矩阵有 2 行和 3 列。

由于我们传递了 byrow = TRUE,所以矩阵中的数据项按行填充。如果我们没有传递 byrow 参数,如

matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3)

输出将是

    [,1]  [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6

在 R 中访问矩阵元素

我们使用向量索引操作符 [ ] 来访问 R 中矩阵的特定元素。

访问矩阵元素的语法是

matrix[n1, n2]

这里,

  • n1 - 指定行位置
  • n2 - 指定列位置

让我们看一个例子,

matrix1 <- matrix(c("Sabby", "Cathy", "Larry", "Harry"), nrow = 2, ncol = 2)

print(matrix1)

# 访问第 1 行第 2 列的元素
cat("\n想要的元素:", matrix1[1, 2])

输出

      [,1]          [,2]
[1,] "Sabby" "Larry"
[2,] "Cathy" "Harry"

想要的元素: Larry

在上面的示例中,我们创建了一个名为 matrix122 列的矩阵,其中包含 4 个字符串类型的数据。注意索引运算符 [] 的使用,

matrix1[1, 2]

这里,[1, 2] 指定我们正在尝试访问第 1 行第 2 列的元素,即 "Larry"

访问整行或整列

在 R 中,我们也可以根据 [] 中传递的值访问整行或整列。

  • [n, ] - 返回第 n 行的所有元素。
  • [ ,n] - 返回第 n 列的所有元素。

例如,

matrix1 <- matrix(c("Sabby", "Cathy", "Larry", "Harry"), nrow = 2, ncol = 2)

print(matrix1)

# 访问第 1 行的所有元素
cat("\n第 1 行:", matrix1[1, ])

# 访问第 2 列的所有元素
cat("\n第 2 列:", matrix1[, 2])

输出

       [,1]         [,2]
[1,] "Sabby" "Larry"
[2,] "Cathy" "Harry"

1: Sabby Larry
2: Larry Harry

这里,

  • matrix1[1, ] - 访问第 1 行的所有元素,即 SabbyLarry
  • matrix1[ ,2] - 访问第 2 列的所有元素,即 LarryHarry

访问多个行或列

我们可以在 R 中使用 c() 函数访问多个行或列。

  • [c(n1,n2), ] - 返回第 n1 行和第 n2 行的所有元素。
  • [ ,c(n1,n2)] - 返回第 n1 列和第 n2 列的所有元素。

例如,

# 创建 2 行 3 列的矩阵
matrix1 <- matrix(c(10, 20, 30, 40, 50, 60), nrow = 2, ncol = 3)

print(matrix1)

# 访问第 1 行和第 3 行的所有元素
cat("\n第 1 行和第 2 行:", matrix1[c(1,3), ])

# 访问第 2 列和第 3 列的所有元素
cat("\n第 2 列和第 3 列:", matrix1[ ,c(2,3)])

输出

       [,1] [,2]  [,3]
[1,] 10 30 50
[2,] 20 40 60

1 行和第 3: 10 20 30 40 50 60
2 列和第 3: 30 40 50 60

这里,

  • [c(1,3), ] - 返回第 1 行和第 3 行的所有元素。
  • [ ,c(2,3)] - 返回第 2 列和第 3 列的所有元素。

在 R 中修改矩阵元素

我们使用向量索引运算符 [] 来修改指定的元素。例如,

matrix1[1,2] = 140

这里,第 1 行第 2 列的元素被更改为 140

让我们来看一个示例,

# 创建一个 2 行 2 列的矩阵
matrix1 <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)

# 打印原始矩阵
print(matrix1)

# 将第 1 行第 2 列的值改为 5
matrix1[1,2] = 5

# 打印更新后的矩阵
print(matrix1)

输出

    [,1] [,2]
[1,] 1 3
[2,] 2 4

[,1] [,2]
[1,] 1 5
[2,] 2 4

在 R 中组合两个矩阵

在 R 中,我们使用 cbind()rbind() 函数将两个矩阵组合在一起。

  • cbind() - 通过列组合两个矩阵
  • rbind() - 通过行组合两个矩阵

我们希望组合的两个矩阵的行数和列数必须相等。例如,

# 创建两个 2 行 2 列的矩阵
even_numbers <- matrix(c(2, 4, 6, 8), nrow = 2, ncol = 2)
odd_numbers <- matrix(c(1, 3, 5, 7), nrow = 2, ncol = 2)

# 通过列组合两个矩阵
total1 <- cbind(even_numbers, odd_numbers)
print(total1)

# 通过行组合两个矩阵
total2 <- rbind(even_numbers, odd_numbers)
print(total2)

输出

    [,1] [,2] [,3] [,4]
[1,] 2 6 1 5
[2,] 4 8 3 7
[,1] [,2]
[1,] 2 6
[2,] 4 8
[3,] 1 5
[4,] 3 7

在这里,首先我们使用了 cbind() 函数将两个矩阵:even_numbersodd_numbers 按列组合。然后使用 rbind() 将两个矩阵按行组合。

在 R 矩阵中检查元素是否存在

在 R 中,我们使用 %in% 操作符来检查指定的元素是否存在于矩阵中,并返回布尔值。

  • TRUE - 如果指定元素存在于矩阵中
  • FALSE - 如果指定元素不存在于矩阵中

例如,

matrix1 <- matrix(c("Sabby", "Cathy", "Larry", "Harry"), nrow = 2, ncol = 2)

"Larry" %in% matrix1 # TRUE

"Kinsley" %in% matrix1 # FALSE

输出

TRUE
FALSE

这里,

  • "Larry" 存在于 matrix1 中,因此方法返回 TRUE
  • "Kinsley" 不存在于 matrix1 中,因此方法返回 FALSE