วิธีนับค่าที่ไม่ซ้ำตามกลุ่มใน r (พร้อมตัวอย่าง)


คุณสามารถใช้วิธีการต่อไปนี้เพื่อนับจำนวนค่าที่ไม่ซ้ำต่อกลุ่มใน R:

วิธีที่ 1: ใช้ Base R

 results <- aggregate(data=df, values_var~group_var, function (x) length ( unique (x)))

วิธีที่ 2: ใช้ dplyr

 library (dplyr)

results <- df %>%
  group_by(group_var) %>%
  summarize(count = n_distinct (values_var))

วิธีที่ 3: การใช้ data.table

 library (data.table)

df <- data.table(df)
results <- df[, .(count = length ( unique (values_var))), by = group_var]

แต่ละวิธีส่งคืนผลลัพธ์ที่เหมือนกันทุกประการ แต่วิธีฐาน R มีแนวโน้มที่จะช้าลงอย่างมากเมื่อทำงานกับเฟรมข้อมูลขนาดใหญ่

ตัวอย่างต่อไปนี้แสดงวิธีการใช้แต่ละวิธีในทางปฏิบัติกับกรอบข้อมูลต่อไปนี้:

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'),
                 points=c(10, 10, 14, 14, 18, 19, 20, 20, 20))

#view data frame
df

  team points
1 to 10
2 to 10
3 to 14
4 to 14
5 B 18
6 B 19
7 C 20
8 C 20
9 C 20

วิธีที่ 1: นับค่าที่ไม่ซ้ำตามกลุ่มโดยใช้ Base R

รหัสต่อไปนี้แสดงวิธีการนับจำนวนคะแนนที่แตกต่างกันสำหรับแต่ละทีมโดยใช้ฐาน R:

 #count unique points values by team
results <- aggregate(data=df, points~team, function (x) length ( unique (x)))

#view results
results

  team points
1 TO 2
2 B 2
3 C 1

จากผลลัพธ์เราจะเห็นได้ว่า:

  • มีค่าคะแนนไม่ซ้ำกัน 2 คะแนนสำหรับทีม A
  • มีค่าคะแนนไม่ซ้ำกัน 2 คะแนนสำหรับทีม B
  • มีค่าคะแนนที่ไม่ซ้ำกัน 1 คะแนนสำหรับทีม C

วิธีที่ 2: นับค่าที่ไม่ซ้ำตามกลุ่มโดยใช้ dplyr

รหัสต่อไปนี้แสดงวิธีการนับจำนวนคะแนนที่แตกต่างกันสำหรับแต่ละทีมโดยใช้ dplyr:

 library (dplyr)

#count unique points values by team
results <- df %>%
  group_by(team) %>%
  summarize(count = n_distinct (points))

#view results
results

# A tibble: 3 x 2
  team count
1 TO 2
2 B 2
3 C 1

โปรดทราบว่าผลลัพธ์เหล่านี้ตรงกับผลลัพธ์ของวิธี R พื้นฐาน

วิธีที่ 3: นับค่าที่ไม่ซ้ำตามกลุ่มโดยใช้ data.table

รหัสต่อไปนี้แสดงวิธีการนับจำนวนคะแนนที่แตกต่างกันสำหรับแต่ละทีมโดยใช้ data.table:

 library (data.table)

#convert data frame to data table
df <- data.table(df)

#count unique points values by team 
results <- df[, .(count = length ( unique (points))), by = team]

#view results
results

   team count
1 TO 2
2:B2
3: C 1

โปรดทราบว่าผลลัพธ์เหล่านี้ตรงกับผลลัพธ์ของสองวิธีก่อนหน้านี้

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการทั่วไปอื่นๆ โดยใช้ dplyr:

วิธีบันทึกค่าใหม่โดยใช้ dplyr
วิธีแทนที่ NA ด้วย Zero ใน dplyr
วิธีจัดเรียงตัวแปรตามกลุ่มโดยใช้ dplyr
วิธีเลือกแถวแรกตามกลุ่มโดยใช้ dplyr

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *