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

การเรียงดาต้าเฟรมตามคอลัมน์

เรียงดาต้าเฟรมทั้งชุดโดยใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การเรียงเวกเตอร์ด้วย sort()
  2. order() สำหรับการจัดลำดับที่ยืดหยุ่น
  3. การจัดอันดับค่าด้วย rank()
  4. การเรียงดาต้าเฟรมตามคอลัมน์
← กลับไปที่ R Academy