การเรียงดาต้าเฟรมตามคอลัมน์
เรียงดาต้าเฟรมทั้งชุดโดยใช้ order() และ arrange() ของ dplyr
การเรียงดาต้าเฟรมตามคอลัมน์ เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
การเรียงดาต้าเฟรมตามคอลัมน์เดียว
วิธีมาตรฐานของ R พื้นฐานในการเรียงดาต้าเฟรมคือใช้ order() กับคอลัมน์ที่ต้องการ แล้วใช้ดัชนีที่ได้เพื่อเรียงแถวใหม่ จุลภาคหลังดัชนีใช้เลือกคอลัมน์ทั้งหมด
df <- data.frame(
name = c('Charlie', 'Alice', 'Bob', 'Diana'),
age = c(35, 28, 42, 31),
salary = c(55000, 48000, 72000, 61000)
)
df[order(df$age), ]การเรียงจากมากไปน้อยด้วยการทำให้เป็นลบ
สำหรับคอลัมน์ตัวเลข ให้ทำคอลัมน์เป็นค่าลบภายใน order() เพื่อกลับทิศทางการเรียง เครื่องหมายลบจะกลับค่าทั้งหมด ทำให้ค่าสูงสุดเดิมกลายเป็นค่าต่ำสุดสำหรับจุดประสงค์ในการเรียง
df <- data.frame(
name = c('Charlie', 'Alice', 'Bob', 'Diana'),
salary = c(55000, 48000, 72000, 61000)
)
# Highest salary first
df[order(-df$salary), ]การเรียงหลายคอลัมน์
ส่งหลายคอลัมน์ให้ order() เพื่อเรียงตามเกณฑ์หลักก่อน แล้วจึงตามเกณฑ์รอง อาร์กิวเมนต์ที่สองจะใช้แยกกรณีที่ค่าในเกณฑ์แรกเท่ากัน วิธีนี้สอดคล้องกับ ORDER BY col1, col2 ของ SQL
df <- data.frame(
dept = c('Eng', 'HR', 'Eng', 'HR', 'Eng'),
name = c('Zara', 'Bob', 'Alice', 'Eve', 'Mike'),
salary = c(90000, 55000, 85000, 58000, 78000)
)
# Sort by dept, then by salary descending within dept
df[order(df$dept, -df$salary), ]การเรียงคอลัมน์ข้อความ
การเรียงตามคอลัมน์ข้อความทำงานในลักษณะเดียวกัน — order() จัดการการเรียงตามลำดับพจนานุกรม หากต้องการเรียงตามตัวอักษรย้อนกลับ ให้ใช้ decreasing = TRUE แทนการทำให้เป็นลบ (การทำให้เป็นลบใช้ได้เฉพาะกับตัวเลข)
df <- data.frame(
city = c('Paris', 'Athens', 'Berlin', 'London'),
pop_mil = c(2.1, 0.6, 3.6, 9.0)
)
# Alphabetical by city
df[order(df$city), ]
# Reverse alphabetical
df[order(df$city, decreasing = TRUE), ]การตั้งหมายเลขแถวใหม่หลังการเรียง
หลังการเรียง ชื่อแถวจะยังสะท้อนตำแหน่งเดิม (เช่น 3, 1, 4, 2) หากต้องการตั้งเป็นจำนวนเต็มเรียงลำดับโดยเริ่มจาก 1 ให้กำหนด row.names(df) <- NULL หรือห่อผลลัพธ์ด้วย data.frame()
df <- data.frame(
x = c(30, 10, 20),
y = c('c', 'a', 'b')
)
sorted <- df[order(df$x), ]
cat('Before reset:\n'); print(sorted)
row.names(sorted) <- NULL
cat('After reset:\n'); print(sorted)การเรียงเมื่อมีค่า NA
เมื่อคอลัมน์ที่ใช้เรียงมีค่า NA โดยค่าเริ่มต้น order() จะวางค่าเหล่านี้ไว้ท้ายสุด ใช้ na.last = FALSE เพื่อย้ายแถวที่มี NA ไปไว้ด้านบน หรือกรองค่าเหล่านี้ออกก่อน
df <- data.frame(
name = c('Alice', 'Bob', 'Carol', 'Dave'),
score = c(85, NA, 92, NA)
)
cat('NAs last (default):\n')
print(df[order(df$score), ])
cat('NAs first:\n')
print(df[order(df$score, na.last = FALSE), ])dplyr::arrange() เป็นทางเลือกสมัยใหม่
แพ็กเกจ dplyr มี arrange() เป็นทางเลือกที่อ่านง่ายกว่า แม้ dplyr จะไม่ใช่ R พื้นฐาน แต่การรู้ไวยากรณ์นี้ช่วยให้คุณอ่านโค้ด R สมัยใหม่ได้ หมายเหตุ: isRunnable เป็น true ที่นี่เพื่อแสดงไวยากรณ์เท่านั้น — ต้องติดตั้ง dplyr ก่อนจึงจะเรียกใช้ได้
# dplyr::arrange() syntax (requires dplyr installed)
# library(dplyr)
# df |> arrange(salary) # ascending
# df |> arrange(desc(salary)) # descending
# df |> arrange(dept, desc(salary)) # multi-column
# Equivalent base R:
df <- data.frame(dept=c('A','B','A'), salary=c(50,70,60))
df[order(df$dept, -df$salary), ]การเรียงแฟกเตอร์ตามลำดับระดับ
คอลัมน์แฟกเตอร์จะเรียงตาม ลำดับระดับ ไม่ใช่ตามตัวอักษร คุณจึงกำหนดลำดับการเรียงแบบกำหนดเองได้โดยตั้งค่าระดับของแฟกเตอร์อย่างชัดเจนก่อนเรียง
df <- data.frame(
priority = factor(c('Low', 'High', 'Medium', 'High', 'Low'),
levels = c('Low', 'Medium', 'High')),
task = c('T1', 'T2', 'T3', 'T4', 'T5')
)
# Sorts by factor level (Low < Medium < High)
df[order(df$priority), ]การเรียงและเลือกแถวด้านบน
รูปแบบที่พบบ่อยคือเรียงดาต้าเฟรม แล้วเลือก N แถวบนสุดด้วย head() หรือเลือก N แถวล่างสุดด้วย tail() ซึ่งเทียบเท่ากับ ORDER BY ... LIMIT N ของ SQL ใน R พื้นฐาน
df <- data.frame(
product = c('A', 'B', 'C', 'D', 'E'),
revenue = c(1200, 4500, 890, 3100, 2750)
)
# Top 3 by revenue
top3 <- head(df[order(-df$revenue), ], 3)
row.names(top3) <- NULL
print(top3)การเรียงโดยตรงเทียบกับการกำหนดผลลัพธ์
การเรียงจะไม่แก้ไขดาต้าเฟรมเดิม — แต่จะส่งคืนดาต้าเฟรมใหม่ คุณควรกำหนดผลลัพธ์ให้กับตัวแปรเสมอ (จะเป็นตัวแปรใหม่หรือเขียนทับตัวแปรเดิมก็ได้) การเขียนทับตัวแปรเดิมทำได้เมื่อคุณไม่ต้องใช้เวอร์ชันที่ยังไม่ได้เรียงแล้ว
df <- data.frame(
x = c(3, 1, 4, 1, 5, 9),
y = c('c', 'a', 'd', 'b', 'e', 'i')
)
# Safe: assign to new variable
df_sorted <- df[order(df$x), ]
# Or overwrite original:
df <- df[order(df$x), ]
row.names(df) <- NULL
print(df)ขั้นตอนการเรียงแบบสมบูรณ์
นี่คือตัวอย่างขั้นตอนการเรียงดาต้าเฟรมที่สมจริงและครบถ้วน: เรียงพนักงานตามชื่อแผนกจากน้อยไปมาก แล้วตามเงินเดือนจากมากไปน้อย ตั้งดัชนีแถวใหม่ และแสดงผลลัพธ์อย่างเป็นระเบียบ
employees <- data.frame(
name = c('Alice', 'Bob', 'Carol', 'Dave', 'Eve'),
dept = c('IT', 'HR', 'IT', 'HR', 'IT'),
salary = c(85000, 58000, 92000, 63000, 78000)
)
result <- employees[order(employees$dept, -employees$salary), ]
row.names(result) <- NULL
print(result)ตรวจสอบความเข้าใจ
คุณจะเรียงดาต้าเฟรม df ตามคอลัมน์ตัวเลข df$salary จากมากไปน้อยโดยใช้ R พื้นฐานได้อย่างไร
การเรียงดาต้าเฟรม: ประเด็นสำคัญ
ประเด็นสำคัญของการเรียงดาต้าเฟรม:
- รูปแบบสำนวนของ R พื้นฐาน:
df[order(df$col), ] - ตัวเลขจากมากไปน้อย: ทำให้เป็นลบด้วย
-ภายในorder(-df$col) - ข้อความจากมากไปน้อย: ใช้อาร์กิวเมนต์
decreasing = TRUE - หลายคอลัมน์:
order(df$a, df$b)— การเรียงรองจะใช้แยกกรณีที่ค่าเท่ากัน - แฟกเตอร์จะเรียงตามลำดับระดับที่กำหนดไว้ ไม่ใช่ตามตัวอักษร
- ตั้งชื่อแถวใหม่ด้วย
row.names(df) <- NULLหลังการเรียง - ทางเลือกสมัยใหม่:
dplyr::arrange()ร่วมกับdesc()สำหรับการเรียงจากมากไปน้อย
df <- data.frame(
name = c('Zara', 'Ana', 'Bob', 'Ana'),
score = c(90, 85, 92, 88)
)
# Sort by name asc, score desc
result <- df[order(df$name, -df$score), ]
row.names(result) <- NULL
print(result)คำถามที่พบบ่อย
บทเรียน “การเรียงดาต้าเฟรมตามคอลัมน์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเรียงดาต้าเฟรมตามคอลัมน์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเรียงดาต้าเฟรมตามคอลัมน์”
เรียงดาต้าเฟรมทั้งชุดโดยใช้ order() และ arrange() ของ dplyr คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การเรียงดาต้าเฟรมตามคอลัมน์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม
ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเรียงเวกเตอร์ด้วย sort()
- order() สำหรับการจัดลำดับที่ยืดหยุ่น
- การจัดอันดับค่าด้วย rank()
- การเรียงดาต้าเฟรมตามคอลัมน์