การเปรียบเทียบ 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 เพิ่มเติมได้ ที่นี่