مقارنة بين 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() هو تصفية الصفوف في إطار بيانات يحتوي على سلسلة معينة:

 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 هنا .

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *