การเปรียบเทียบ grep() และ grepl() ใน r: อะไรคือความแตกต่าง?


สองฟังก์ชันที่ผู้คนมักสับสนใน R คือ grep() และ grepl() ทั้งสองฟังก์ชันช่วยให้คุณดูว่ามีรูปแบบใดรูปแบบหนึ่งในสตริงหรือไม่ แต่กลับให้ผลลัพธ์ที่แตกต่างกัน:

  • grepl() ส่งคืน TRUE เมื่อมีรูปแบบอยู่ในสตริง
  • grep() ส่งคืนเวกเตอร์ของดัชนีสตริงที่มีรูปแบบ

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงความแตกต่างนี้:

 #create a vector of data
data <- c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center')

grep ('Guard', data)
[1] 1 2

grepl ('Guard', data) 
[1] TRUE TRUE FALSE FALSE FALSE

ตัวอย่างต่อไปนี้จะแสดงเมื่อคุณอาจต้องการใช้ฟังก์ชันใดฟังก์ชันหนึ่งเหล่านี้ทับฟังก์ชันอื่น

เมื่อใดจึงควรใช้ grepl()

1. กรองแถวที่มีสตริงที่กำหนด

หนึ่งในการใช้งานทั่วไปของ grepl() คือการกรองแถวใน data frame ที่มีสตริงบางตัว:

 library(dplyr)

#create data frame
df <- data.frame(player = c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center'),
                 points = c(12, 15, 19, 22, 32),
                 rebounds = c(5, 7, 7, 12, 11))

#filter rows that contain the string 'Guard' in the player column
df %>% filter( grepl ('Guard', player))

   player points rebounds
1 P Guard 12 5
2 S Guard 15 7

ที่เกี่ยวข้อง: วิธีกรองแถวที่มีสตริงบางตัวโดยใช้ dplyr

เมื่อใดจึงควรใช้ grep()

1. เลือกคอลัมน์ที่มีสตริงที่แน่นอน

คุณสามารถใช้ grep() เพื่อเลือกคอลัมน์ในกรอบข้อมูลที่มีสตริงบางตัว:

 library(dplyr)

#create data frame
df <- data.frame(player = c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center'),
                 points = c(12, 15, 19, 22, 32),
                 rebounds = c(5, 7, 7, 12, 11))

#select columns that contain the string 'p' in their name
df %>% select( grep ('p', colnames(df)))

     player points
1 P Guard 12
2 S Guard 15
3S Forward 19
4P Forward 22
5 Center 32

2. นับจำนวนบรรทัดที่มีสตริงที่แน่นอน

คุณสามารถใช้ grep() เพื่อนับจำนวนบรรทัดในกรอบข้อมูลที่มีสตริงบางตัว:

 #create data frame
df <- data.frame(player = c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center'),
                 points = c(12, 15, 19, 22, 32),
                 rebounds = c(5, 7, 7, 12, 11))

#count how many rows contain the string 'Guard' in the player column
length( grep ('Guard', df$player))

[1] 2

คุณสามารถค้นหาบทช่วยสอน R เพิ่มเติมได้ ที่นี่

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

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