การทำดัชนีและเลือกข้อมูลย่อยในเมทริกซ์
เข้าถึงแถว คอลัมน์ และสมาชิกโดยใช้สัญกรณ์ [row, col]
การทำดัชนีและเลือกข้อมูลย่อยในเมทริกซ์ เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
พื้นฐานการระบุตำแหน่งในเมทริกซ์
หากต้องการเข้าถึงสมาชิกในเมทริกซ์ ให้ใช้สัญกรณ์ m[row, col] ดัชนีแถวและคอลัมน์ใน R เริ่มต้นที่ 1 ต้องมีเครื่องหมายจุลภาค หากละไว้ R จะถือว่าเมทริกซ์เป็นเวกเตอร์แบบแบน
m <- matrix(1:12, nrow = 3, ncol = 4)
cat('Full matrix:
')
print(m)
# Element at row 2, column 3
cat('m[2, 3] =', m[2, 3], '
')
# Element at row 1, column 4
cat('m[1, 4] =', m[1, 4], '
')การดึงข้อมูลทั้งแถว
เว้นดัชนีคอลัมน์ว่างไว้เพื่อดึงข้อมูลทั้งแถว ผลลัพธ์จะเป็นเวกเตอร์ (มิติของเมทริกซ์จะถูกตัดออก) และยังต้องมีเครื่องหมายจุลภาคอยู่
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')
print(scores)
# Extract Alice's row
alice_scores <- scores[1, ]
cat('Alice:', alice_scores, '
')
cat('Alice mean:', mean(alice_scores), '
')การดึงข้อมูลทั้งคอลัมน์
เว้นดัชนีแถวว่างไว้เพื่อดึงข้อมูลทั้งคอลัมน์ เช่นเดียวกับการดึงข้อมูลทั้งแถว ผลลัพธ์จะเป็นเวกเตอร์ และยังต้องมีเครื่องหมายจุลภาคคั่นตำแหน่งแถวกับคอลัมน์อยู่
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')
# Extract the Math column
math_scores <- scores[, 1]
cat('Math scores:', math_scores, '
')
cat('Math mean: ', mean(math_scores), '
')
cat('Math max: ', max(math_scores), '
')การเลือกหลายแถวและหลายคอลัมน์
ใช้เวกเตอร์ของดัชนีเพื่อดึงข้อมูลหลายแถวหรือหลายคอลัมน์พร้อมกัน ผลลัพธ์จะเป็นเมทริกซ์ย่อย (ยังคงเป็นเมทริกซ์ ไม่ใช่เวกเตอร์) โดยรักษาโครงสร้างสองมิติไว้
m <- matrix(1:16, nrow = 4, ncol = 4)
cat('Original 4x4:
')
print(m)
# Extract rows 1,3 and columns 2,4
sub_m <- m[c(1, 3), c(2, 4)]
cat('Submatrix rows 1,3 cols 2,4:
')
print(sub_m)
cat('Class:', class(sub_m), '
')การเข้าถึงด้วยชื่อแถวหรือคอลัมน์
หากเมทริกซ์มีชื่อแถวและคอลัมน์ คุณสามารถระบุดัชนีด้วยชื่อแทนตำแหน่งได้ วิธีนี้อ่านเข้าใจง่ายกว่าและยังคงทำงานได้ถูกต้องแม้มีการเรียงแถวหรือคอลัมน์ใหม่
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
nrow = 3, byrow = TRUE,
dimnames = list(
c('Alice', 'Bob', 'Carol'),
c('Math', 'Sci', 'Eng', 'Hist')
))
# Access by name
cat('Bob Science:', scores['Bob', 'Sci'], '
')
cat('Carol row:
')
print(scores['Carol', ])
cat('English column:
')
print(scores[, 'Eng'])การระบุดัชนีเชิงตรรกะในเมทริกซ์
คุณสามารถใช้เวกเตอร์เชิงตรรกะ (หรือเมทริกซ์เชิงตรรกะ) เพื่อเลือกสมาชิกได้ เมื่อใช้เวกเตอร์เชิงตรรกะกับมิติใดมิติหนึ่ง ระบบจะเลือกแถวหรือคอลัมน์ที่มีค่าเป็น TRUE
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
# Select students with mean score >= 85
row_means <- rowMeans(scores)
high_achievers <- scores[row_means >= 85, ]
cat('High achievers (mean >= 85):
')
print(high_achievers)การระบุดัชนีติดลบ — การตัดแถวหรือคอลัมน์ออก
เติมเครื่องหมาย - หน้าดัชนีเพื่อตัดแถวนั้นหรือคอลัมน์นั้นออก วิธีนี้ช่วยตัดแถวหรือคอลัมน์ที่ต้องการได้อย่างสะดวก โดยไม่ต้องระบุรายการอื่นทั้งหมดที่ต้องการเก็บไว้
m <- matrix(1:12, nrow = 3, ncol = 4, byrow = TRUE)
cat('Original:
')
print(m)
# Drop row 2
cat('Without row 2:
')
print(m[-2, ])
# Drop columns 1 and 3
cat('Without cols 1 and 3:
')
print(m[, c(-1, -3)])สมาชิกเดียวด้วย drop = FALSE
โดยค่าเริ่มต้น การดึงแถวหรือคอลัมน์เดียวจะตัดมิติออก (และคืนค่าเป็นเวกเตอร์) ให้ใช้ drop = FALSE เพื่อให้ผลลัพธ์ยังคงเป็นเมทริกซ์ (และรักษาโครงสร้างแถวหรือคอลัมน์ไว้)
m <- matrix(1:9, nrow = 3, ncol = 3)
# Default: drops to vector
row1_vector <- m[1, ]
cat('m[1,] class:', class(row1_vector), '
') # numeric (vector)
# drop = FALSE: keeps as 1-row matrix
row1_matrix <- m[1, , drop = FALSE]
cat('m[1,,drop=FALSE] class:', class(row1_matrix), '
')
cat('Dimensions:', dim(row1_matrix), '
')การแทนค่าด้วยดัชนี
คุณสามารถแก้ไขสมาชิกที่ต้องการได้โดยใช้การระบุดัชนีร่วมกับการกำหนดค่า วิธีนี้ใช้ได้กับสมาชิกเดียว ทั้งแถว ทั้งคอลัมน์ หรือเมทริกซ์ย่อย
m <- matrix(0, nrow = 4, ncol = 4)
cat('Zero matrix:
')
print(m)
# Set diagonal to 5
for (i in 1:4) m[i, i] <- 5
cat('After setting diagonal:
')
print(m)
# Replace entire row 2
m[2, ] <- c(1, 2, 3, 4)
cat('After replacing row 2:
')
print(m)การระบุดัชนีเชิงเส้น (แบบแบน)
ภายในแล้ว เมทริกซ์จะถูกจัดเก็บเป็นเวกเตอร์แบบแบน (ทีละคอลัมน์) คุณสามารถเข้าถึงสมาชิกด้วยดัชนีจำนวนเต็มเพียงค่าเดียวตามลำดับแบบแบนนี้ ซึ่งบางครั้งมีประโยชน์สำหรับการดำเนินการกับข้อมูลจำนวนมาก
m <- matrix(c(10,20,30,40,50,60), nrow = 2, ncol = 3)
cat('Matrix:
')
print(m)
# Flat indices: column by column
cat('m[1] =', m[1], '(row 1, col 1)
')
cat('m[3] =', m[3], '(row 1, col 2)
')
cat('m[5] =', m[5], '(row 1, col 3)
')
# Replace flat index 4
m[4] <- 99
print(m)สรุปการระบุดัชนี
ข้อมูลอ้างอิงอย่างรวดเร็วสำหรับการระบุดัชนีเมทริกซ์ใน R:
m[r, c]— สมาชิกเดียวที่แถว r คอลัมน์ cm[r, ]— แถว r ทั้งแถวm[, c]— คอลัมน์ c ทั้งคอลัมน์m[c(r1,r2), c(c1,c2)]— เมทริกซ์ย่อยm['name', 'name']— เข้าถึงด้วยชื่อมิติm[-r, ]— ตัดแถว r ออกm[logical_vec, ]— เลือกแถวเชิงตรรกะm[r, , drop=FALSE]— รักษาให้เป็นเมทริกซ์
m <- matrix(c(5,10,15,20,25,30), nrow = 2, ncol = 3)
cat('m[1,2] =', m[1,2], '
')
cat('m[2,] =', m[2,], '
')
cat('m[,3] =', m[,3], '
')
cat('m[-1,] :
'); print(m[-1, ])ตรวจสอบความเข้าใจอย่างรวดเร็ว
m[-2, ] คืนค่าอะไรเมื่อ m เป็นเมทริกซ์ที่มี 3 แถว
ทบทวน: การระบุดัชนีในเมทริกซ์
ทำได้ดีมาก! ประเด็นสำคัญจากบทเรียนนี้มีดังนี้:
m[r, c]ใช้แถวก่อนแล้วจึงใช้คอลัมน์ โดยทั้งสองตำแหน่งคั่นด้วยจุลภาค- เว้นด้านใดด้านหนึ่งว่างไว้ (
m[r, ]หรือm[, c]) เพื่อดึงข้อมูลทั้งแถวหรือทั้งคอลัมน์ - ดัชนีติดลบใช้ตัดแถวหรือคอลัมน์ออก
- เวกเตอร์เชิงตรรกะใช้กรองแถวหรือคอลัมน์ได้
- มิติที่มีชื่อช่วยให้ระบุดัชนีด้วยชื่อได้ง่ายและอ่านเข้าใจได้ดี
drop = FALSEป้องกันไม่ให้มิติหายไปเมื่อดึงแถวหรือคอลัมน์เดียว
# Practical: find best student per subject
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')
for (subj in colnames(scores)) {
best <- rownames(scores)[which.max(scores[, subj])]
cat('Best in', subj, ':', best, '
')
}คำถามที่พบบ่อย
บทเรียน “การทำดัชนีและเลือกข้อมูลย่อยในเมทริกซ์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การทำดัชนีและเลือกข้อมูลย่อยในเมทริกซ์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การทำดัชนีและเลือกข้อมูลย่อยในเมทริกซ์”
เข้าถึงแถว คอลัมน์ และสมาชิกโดยใช้สัญกรณ์ [row, col] คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การทำดัชนีและเลือกข้อมูลย่อยในเมทริกซ์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม
ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การสร้างเมทริกซ์ด้วย matrix()
- การทำดัชนีและเลือกข้อมูลย่อยในเมทริกซ์
- เลขคณิตและการดำเนินการกับเมทริกซ์
- การทรานสโพสและปรับรูปร่างเมทริกซ์