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

สรุปข้อมูลแบบจัดกลุ่มและ group_by()

รวมข้อมูลตามกลุ่มและคำนวณสถิติของแต่ละกลุ่ม

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

เหตุใดจึงต้องจัดกลุ่มข้อมูล

การจัดกลุ่มข้อมูลเป็นหนึ่งในการดำเนินการที่ทรงพลังที่สุดในการวิเคราะห์ข้อมูล แทนที่จะคำนวณสถิติจากชุดข้อมูลทั้งหมด คุณจะคำนวณภายในแต่ละกลุ่ม แพ็กเกจ dplyr ทำให้แนวคิดนี้เข้าใจง่ายด้วย group_by() ตามด้วย summarize()

library(dplyr)

# Sample sales data
sales <- data.frame(
  region = c('North','North','South','South','East'),
  revenue = c(120, 95, 200, 175, 88),
  units = c(10, 8, 15, 12, 7)
)

print(sales)

พื้นฐานของ group_by()

group_by(col) ทำเครื่องหมายดาตาเฟรมเพื่อให้การดำเนินการถัดไปเกิดขึ้นแยกตามกลุ่ม ฟังก์ชันนี้ไม่ได้เปลี่ยนแปลงข้อมูล แต่เพิ่มข้อมูลเมตาของการจัดกลุ่ม คุณสามารถจัดกลุ่มตามคอลัมน์เดียวหรือหลายคอลัมน์ได้

library(dplyr)

sales <- data.frame(
  region = c('North','North','South','South','East'),
  revenue = c(120, 95, 200, 175, 88),
  units = c(10, 8, 15, 12, 7)
)

# Group by region
grouped <- sales %>% group_by(region)
print(grouped)
print(group_keys(grouped))

summarize() หลัง group_by()

summarize() (หรือ summarise()) ยุบแต่ละกลุ่มให้เหลือหนึ่งแถว คุณระบุชื่อคอลัมน์ใหม่และฟังก์ชันสรุปที่จะใช้ได้ ฟังก์ชันที่ใช้บ่อย ได้แก่ n(), mean(), sum(), min() และ max()

library(dplyr)

sales <- data.frame(
  region = c('North','North','South','South','East'),
  revenue = c(120, 95, 200, 175, 88),
  units = c(10, 8, 15, 12, 7)
)

sales %>%
  group_by(region) %>%
  summarize(
    n = n(),
    mean_revenue = mean(revenue),
    total_units = sum(units)
  )

การนับด้วย n()

n() ภายใน summarize() จะส่งคืนจำนวนแถวในแต่ละกลุ่ม โดยไม่ต้องรับอาร์กิวเมนต์ หากต้องการนับแถวที่ตรงตามเงื่อนไข ให้ใช้ sum(condition) ส่วน n_distinct(col) ใช้นับค่าที่ไม่ซ้ำกัน

library(dplyr)

employees <- data.frame(
  dept = c('HR','HR','Eng','Eng','Eng','Sales'),
  salary = c(55000, 60000, 95000, 105000, 90000, 70000),
  senior = c(FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)
)

employees %>%
  group_by(dept) %>%
  summarize(
    count = n(),
    senior_count = sum(senior),
    avg_salary = mean(salary)
  )

การจัดกลุ่มตามหลายคอลัมน์

คุณสามารถส่งหลายคอลัมน์ให้กับ group_by() ได้ กลุ่มจะถูกสร้างจากชุดค่าผสมทุกแบบที่ปรากฏในข้อมูล วิธีนี้มีประโยชน์สำหรับตารางไขว้และสรุปข้อมูลแบบลำดับชั้น

library(dplyr)

orders <- data.frame(
  region = c('North','North','South','South','North','South'),
  product = c('A','B','A','B','A','A'),
  sales = c(100, 200, 150, 250, 120, 180)
)

orders %>%
  group_by(region, product) %>%
  summarize(
    total_sales = sum(sales),
    orders = n(),
    .groups = 'drop'
  )

อาร์กิวเมนต์ .groups

หลังจากใช้ summarize() ผลลัพธ์จะยังคงจัดกลุ่มตามตัวแปรจัดกลุ่มทั้งหมด ยกเว้นตัวสุดท้าย อาร์กิวเมนต์ .groups ใช้ควบคุมพฤติกรรมนี้:

  • 'drop_last' — ค่าเริ่มต้น ลบระดับกลุ่มสุดท้าย
  • 'drop' — ลบการจัดกลุ่มทั้งหมด
  • 'keep' — คงการจัดกลุ่มทั้งหมดไว้
library(dplyr)

df <- data.frame(
  year = c(2022,2022,2023,2023),
  quarter = c('Q1','Q2','Q1','Q2'),
  revenue = c(100, 120, 130, 150)
)

# .groups = 'drop' ensures ungrouped result
result <- df %>%
  group_by(year, quarter) %>%
  summarize(total = sum(revenue), .groups = 'drop')

print(result)
print(is.grouped_df(result))  # FALSE

ungroup() อย่างชัดเจน

คุณสามารถเรียกใช้ ungroup() ได้ทุกเมื่อเพื่อลบข้อมูลเมตาของการจัดกลุ่มออกจากดาตาเฟรม ซึ่งสำคัญเมื่อคุณต้องการให้การดำเนินการถัดไปทำงานกับข้อมูลทั้งหมด ไม่ใช่แยกตามกลุ่ม

library(dplyr)

df <- data.frame(
  dept = c('HR','HR','Eng','Eng'),
  salary = c(55000, 60000, 95000, 105000)
)

# Without ungroup: rank is within group
df %>%
  group_by(dept) %>%
  mutate(rank_in_dept = rank(salary)) %>%
  ungroup() %>%
  mutate(rank_overall = rank(salary))

group_keys() และ n_groups()

group_keys() จะส่งคืนดาตาเฟรมที่แสดงชุดค่าผสมของกลุ่มที่ไม่ซ้ำกัน ส่วน n_groups() จะบอกว่ามีกลุ่มอยู่กี่กลุ่ม ฟังก์ชันเหล่านี้มีประโยชน์สำหรับตรวจสอบโครงสร้างก่อนดำเนินการกับข้อมูลแบบจัดกลุ่ม

library(dplyr)

df <- data.frame(
  country = c('US','US','UK','UK','DE'),
  category = c('A','B','A','A','B'),
  value = c(10, 20, 15, 25, 30)
)

grouped <- df %>% group_by(country, category)

cat('Number of groups:', n_groups(grouped), '\n')
print(group_keys(grouped))

การสรุปด้วยสถิติหลายรายการ

คุณสามารถคำนวณสถิติสรุปหลายรายการได้ในคำสั่ง summarize() เดียว รวมการนับ ค่าเฉลี่ย มัธยฐาน ส่วนเบี่ยงเบนมาตรฐาน ค่าต่ำสุด ค่าสูงสุด และการคำนวณแบบกำหนดเองได้พร้อมกัน

library(dplyr)

scores <- data.frame(
  class = c('A','A','A','B','B','B','C','C'),
  score = c(85, 90, 78, 92, 88, 95, 70, 75)
)

scores %>%
  group_by(class) %>%
  summarize(
    n = n(),
    mean_score = round(mean(score), 1),
    median_score = median(score),
    sd_score = round(sd(score), 2),
    min_score = min(score),
    max_score = max(score)
  )

mutate() ที่คำนึงถึงกลุ่ม

mutate() หลัง group_by() จะคำนวณค่าภายในแต่ละกลุ่ม แต่ยังคงเก็บทุกแถวไว้ (ต่างจาก summarize()) เหมาะอย่างยิ่งสำหรับคำนวณตัวชี้วัดระดับกลุ่มที่ต้องการแนบไว้กับทุกแถว

library(dplyr)

sales <- data.frame(
  region = c('East','East','West','West','West'),
  rep = c('Alice','Bob','Carol','Dave','Eve'),
  revenue = c(150, 200, 120, 180, 160)
)

sales %>%
  group_by(region) %>%
  mutate(
    region_total = sum(revenue),
    pct_of_region = round(100 * revenue / sum(revenue), 1)
  ) %>%
  ungroup()

การกรองภายในกลุ่ม

filter() หลัง group_by() จะกรองแถวตามเงื่อนไขระดับกลุ่ม ตัวอย่างเช่น เก็บเฉพาะผู้ทำผลงานสูงสุดในแต่ละภูมิภาค หรือแถวที่ค่ามากกว่าค่าเฉลี่ยของกลุ่ม

library(dplyr)

sales <- data.frame(
  region = c('East','East','West','West','North','North'),
  rep = c('Alice','Bob','Carol','Dave','Eve','Frank'),
  revenue = c(150, 200, 120, 180, 95, 130)
)

# Keep the top rep per region
sales %>%
  group_by(region) %>%
  filter(revenue == max(revenue)) %>%
  ungroup()

ตรวจสอบด่วน

อาร์กิวเมนต์ .groups = 'drop' ใน summarize() ทำหน้าที่อะไร

ทบทวน: สรุปข้อมูลแบบจัดกลุ่ม

ประเด็นสำคัญจากการสรุปข้อมูลแบบจัดกลุ่ม:

  • group_by(col) เพิ่มการจัดกลุ่ม — ข้อมูลไม่เปลี่ยนแปลง แต่การดำเนินการจะคำนึงถึงกลุ่ม
  • summarize() ยุบแต่ละกลุ่มให้เหลือหนึ่งแถว — ใช้ n(), mean(), sum() และอื่น ๆ
  • .groups = 'drop' ทำให้แน่ใจว่าผลลัพธ์ไม่มีการจัดกลุ่ม
  • ungroup() ลบการจัดกลุ่มได้ทุกเมื่อ
  • group_keys() ตรวจสอบระดับกลุ่ม ส่วน n_groups() นับจำนวนกลุ่ม
  • mutate() + group_by() เพิ่มคอลัมน์ระดับกลุ่มโดยไม่ยุบแถว
library(dplyr)

# Full pipeline example
data.frame(
  dept = c('Eng','Eng','HR','HR','Sales'),
  salary = c(95000, 110000, 60000, 65000, 75000)
) %>%
  group_by(dept) %>%
  summarize(
    headcount = n(),
    avg_salary = mean(salary),
    .groups = 'drop'
  ) %>%
  arrange(desc(avg_salary))

คำถามที่พบบ่อย

บทเรียน “สรุปข้อมูลแบบจัดกลุ่มและ group_by()” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “สรุปข้อมูลแบบจัดกลุ่มและ group_by()” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “สรุปข้อมูลแบบจัดกลุ่มและ group_by()”

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

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

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

บทเรียน “สรุปข้อมูลแบบจัดกลุ่มและ group_by()” ใช้เวลานานแค่ไหน

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

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

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

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

  1. สรุปข้อมูลแบบจัดกลุ่มและ group_by()
  2. ฟังก์ชันหน้าต่าง: lag, lead, cumsum
  3. การเชื่อมหลายตารางใน dplyr
  4. การประเมินแบบเป็นระเบียบ: {{ }} และ .data
← กลับไปที่ R Academy