Dplyr: วิธีใช้ anti_join เพื่อค้นหาบันทึกที่ไม่ตรงกัน


คุณสามารถใช้ฟังก์ชัน anti_join() จากแพ็คเกจ dplyr ใน R เพื่อส่งคืนแถวทั้งหมดใน data frame ที่ไม่มีค่าที่ตรงกันใน data frame อื่น

ฟังก์ชันนี้ใช้ไวยากรณ์พื้นฐานต่อไปนี้:

 anti_join(df1, df2, by= ' col_name ')

ตัวอย่างต่อไปนี้แสดงวิธีใช้ไวยากรณ์นี้ในทางปฏิบัติ

ตัวอย่างที่ 1: ใช้ anti_join() กับคอลัมน์

สมมติว่าเรามีเฟรมข้อมูลสองเฟรมต่อไปนี้ใน R:

 #create data frames
df1 <- data. frame (team=c('A', 'B', 'C', 'D', 'E'),
                  dots=c(12, 14, 19, 24, 36))

df2 <- data. frame (team=c('A', 'B', 'C', 'F', 'G'),
                  dots=c(12, 14, 19, 33, 17))

เราสามารถใช้ฟังก์ชัน anti_join() เพื่อส่งคืนแถวทั้งหมดใน data frame แรกที่ไม่มีทีมที่ตรงกันใน data frame ที่สอง:

 library (dplyr)

#perform anti join using 'team' column
anti_join(df1, df2, by=' team ')

  team points
1 D 24
2 E 36

เราจะเห็นได้ว่ามีสองทีมจาก data frame แรกที่ไม่มีชื่อทีมที่ตรงกันใน data frame ที่สอง

ตัวอย่างที่ 2: ใช้ anti_join() กับหลายคอลัมน์

สมมติว่าเรามีเฟรมข้อมูลสองเฟรมต่อไปนี้ใน R:

 #create data frames
df1 <- data. frame (team=c('A', 'A', 'A', 'B', 'B', 'B'),
                  position=c('G', 'G', 'F', 'G', 'F', 'C'),
                  dots=c(12, 14, 19, 24, 36, 41))

df2 <- data. frame (team=c('A', 'A', 'A', 'B', 'B', 'B'),
                  position=c('G', 'G', 'C', 'G', 'F', 'F'),
                  dots=c(12, 14, 19, 33, 17, 22))

เราสามารถใช้ฟังก์ชัน anti_join() เพื่อส่งคืนแถวทั้งหมดใน data frame แรกที่ไม่มีทีมที่ตรงกัน และ ตำแหน่งใน data frame ที่สอง:

 library (dplyr)

#perform anti join using 'team' and 'position' columns
anti_join(df1, df2, by=c(' team ', ' position '))

  team position points
1 FY 19
2 BC 41

เราจะเห็นได้ว่ามีบันทึกสองรายการจากกรอบข้อมูลแรกที่ไม่มีชื่อทีม และ ตำแหน่งที่ตรงกันในกรอบข้อมูลที่สอง

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

บทช่วยสอนต่อไปนี้จะอธิบายวิธีการใช้งานฟังก์ชันทั่วไปอื่น ๆ ใน dplyr:

วิธีเลือกคอลัมน์ตามดัชนีโดยใช้ dplyr
วิธีรวมหลายเฟรมข้อมูลโดยใช้ dplyr
วิธีกรองแถวที่มีสตริงบางตัวโดยใช้ dplyr

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

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