0Pricing
R Academy · บทเรียน

การทรานสโพสและปรับรูปร่างเมทริกซ์

ใช้ t(), dim() และการดำเนินการ reshape กับเมทริกซ์

การทรานสโพสและปรับรูปร่างเมทริกซ์ เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน 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) — ทำให้เป็นเวกเตอร์ 1 มิติ (เรียงตามคอลัมน์)
  • 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 ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การทรานสโพสและปรับรูปร่างเมทริกซ์”

ใช้ t(), dim() และการดำเนินการ reshape กับเมทริกซ์ คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การทรานสโพสและปรับรูปร่างเมทริกซ์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม

ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสร้างเมทริกซ์ด้วย matrix()
  2. การทำดัชนีและเลือกข้อมูลย่อยในเมทริกซ์
  3. เลขคณิตและการดำเนินการกับเมทริกซ์
  4. การทรานสโพสและปรับรูปร่างเมทริกซ์
← กลับไปที่ R Academy