R Academy · 课时

矩阵转置与重塑

对矩阵使用 t()、dim() 和 reshape 操作

第 4 / 4 课13 个步骤

矩阵转置与重塑 是 CoddyKit 上的免费 R Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 R Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 R Academy 课程共包含 4 节课。

使用 t() 转置矩阵

t(m) 会转置矩阵——交换行和列,使结果中的第 i 行变为第 i 列。维度也会交换:3x4 矩阵转置后变为 4x3 矩阵。

m <- matrix(1:6, nrow = 2, ncol = 3)
cat('Original (2x3):
'); print(m)
cat('Transposed (3x2):
'); print(t(m))
cat('Original dim:', dim(m), '-> Transposed dim:', dim(t(m)), '
')

转置带命名维度的矩阵

当矩阵具有行名和列名时,t() 会正确交换这些名称:行名变为列名,列名变为行名。这样转置后数据仍保留标签。

scores <- matrix(
  c(88,92,75, 79,85,90),
  nrow = 2, byrow = TRUE,
  dimnames = list(c('Alice', 'Bob'), c('Math', 'Sci', 'Eng'))
)
cat('Original (students x subjects):
'); print(scores)
cat('Transposed (subjects x students):
'); print(t(scores))

使用 dim(m) <- c(r, c) 重塑

您可以通过重新赋值 dim 属性来重塑矩阵。元素总数必须保持不变。重塑时会像 matrix() 一样,按列读取和填充。

m <- matrix(1:12, nrow = 3, ncol = 4)
cat('Original (3x4):
'); print(m)

# Reshape to 4x3
dim(m) <- c(4, 3)
cat('Reshaped to (4x3):
'); print(m)

# Reshape to 6x2
dim(m) <- c(6, 2)
cat('Reshaped to (6x2):
'); print(m)

使用 as.vector() 将矩阵转换为向量

as.vector(m) 会将矩阵展平为一维向量,并按列读取值。这会从对象中删除所有维度属性。

m <- matrix(c(10,20,30,40,50,60), nrow = 2, ncol = 3)
cat('Matrix:
'); print(m)

v <- as.vector(m)
cat('As vector (col-by-col):', v, '
')
cat('Is vector:', is.vector(v), '
')
cat('Is matrix:', is.matrix(v), '
')

使用 as.matrix() 将向量转换为矩阵

as.matrix(v) 会将向量转换为单列矩阵。这是最简单的转换方式。随后,您可以使用 dim() 对其进行重塑,以获得所需的维度。

v <- c(5, 10, 15, 20, 25, 30)
cat('Vector:', v, '
')

# as.matrix makes a 6x1 matrix
m_single_col <- as.matrix(v)
cat('Single-column matrix:
'); print(m_single_col)
cat('Dimensions:', dim(m_single_col), '
')

rbind()——堆叠行

rbind() 通过堆叠行来组合矩阵或向量。所有输入必须具有相同的列数。结果矩阵的行数为各输入行数之和。

first_half <- matrix(1:6, nrow = 2, ncol = 3)
second_half <- matrix(7:12, nrow = 2, ncol = 3)

combined <- rbind(first_half, second_half)
cat('rbind result (4x3):
'); print(combined)
cat('Dimensions:', dim(combined), '
')

cbind()——连接列

cbind() 通过并排连接列来组合矩阵或向量。所有输入必须具有相同的行数。结果的列数为各输入列数之和。

ids <- matrix(101:104, nrow = 4, ncol = 1)
scores_mat <- matrix(c(88,79,95,72, 92,85,78,90), nrow = 4)

full_data <- cbind(ids, scores_mat)
colnames(full_data) <- c('ID', 'Test1', 'Test2')
cat('cbind result:
'); print(full_data)

带命名行列的 rbind() 和 cbind()

对带名称的矩阵或向量使用 rbind() 或 cbind() 时,维度名称会得到保留(对于向量,向量名称会变成行名或列名)。

# Add a new student row with rbind
existing <- matrix(c(88,92,75, 79,85,90), nrow = 2, byrow = TRUE,
                   dimnames = list(c('Alice','Bob'), c('Math','Sci','Eng')))
new_student <- c(Math=95, Sci=78, Eng=82)
updated <- rbind(existing, Carol = new_student)
cat('Updated roster:
'); print(updated)

二次转置恒等式

应用两次 t() 会返回原矩阵。这是一种实用的合理性检查,也说明转置是自身的逆运算:t(t(m)) == m。

m <- matrix(c(1,2,3,4,5,6), nrow = 2)
cat('Original:
'); print(m)
cat('t(m):
');    print(t(m))
cat('t(t(m)):
'); print(t(t(m)))
cat('t(t(m)) == m:', all(t(t(m)) == m), '
')

实践:透视式重塑

一种常见的重塑任务是在宽格式和长格式之间进行转换。这里我们使用矩阵运算模拟手动的宽转长透视过程——转置、展平并重新构建结构。

# Wide: 3 students x 4 months scores
wide <- matrix(c(85,88,90,92, 78,80,79,83, 91,94,88,95),
               nrow = 3, byrow = TRUE)
rownames(wide) <- c('Alice', 'Bob', 'Carol')
colnames(wide) <- c('Jan', 'Feb', 'Mar', 'Apr')
cat('Wide format:
'); print(wide)

# Transposed: 4 months x 3 students
long_view <- t(wide)
cat('Transposed (months x students):
'); print(long_view)

重塑与组合总结

矩阵重塑和组合的主要工具:

  • t(m) — 转置(交换行和列)
  • dim(m) <- c(r, c) — 原地重塑(元素总数不变)
  • as.vector(m) — 展平为一维向量(按列存储)
  • as.matrix(v) — 将向量转换为单列矩阵
  • rbind(...) — 垂直堆叠矩阵
  • cbind(...) — 水平连接矩阵
# Demo all tools
v <- 1:6
m1 <- as.matrix(v)               # 6x1
dim(m1) <- c(2, 3)               # reshape to 2x3
m2 <- t(m1)                      # 3x2
m3 <- cbind(m2, c(10, 20, 30))   # 3x3
cat('Final matrix:
'); print(m3)

快速检查

t(matrix(1:12, nrow = 3, ncol = 4)) 会生成什么维度?

回顾:转置与重塑

做得很好!本课的要点如下:

  • t(m) 交换行和列;t(t(m)) 返回原矩阵
  • dim(m) <- c(r, c) 在不复制数据的情况下进行重塑(元素数量必须相同)
  • as.vector() 按列展平;as.matrix() 创建单列矩阵
  • rbind() 堆叠行(列数必须相同)
  • cbind() 并排连接列(行数必须相同)
  • 命名维度会在这些运算中得到保留
# Practical: merge data then compute column means
team_a <- matrix(c(82,78,91, 85,80,88), nrow = 2, byrow=TRUE)
team_b <- matrix(c(75,92,79, 88,84,93), nrow = 2, byrow=TRUE)
all_teams <- rbind(team_a, team_b)
colnames(all_teams) <- c('Speed', 'Accuracy', 'Strength')
cat('Combined teams:
'); print(all_teams)
cat('Average per skill:', colMeans(all_teams), '
')
免费开始

用 AI 导师学习 R — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
43
课程
159

常见问题解答

「矩阵转置与重塑」课时是免费的吗?

是的 — 「矩阵转置与重塑」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 R Academy 课程的其余内容,请升级到 CoddyKit PRO。 R Academy 课程共包含 4 节课。

「矩阵转置与重塑」这节课中我会学到什么?

对矩阵使用 t()、dim() 和 reshape 操作 你通过在浏览器中直接运行的动手代码来练习 R Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 R Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 R Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「矩阵转置与重塑」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 R Academy 课中编写并运行代码吗?

能。每节 R Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 matrix() 创建矩阵
  2. 矩阵索引与子集
  3. 矩阵算术与运算
  4. 矩阵转置与重塑
← 返回 R Academy