সমাধান
এটা ব্যবহার করা সম্ভব str_detect
এর stringr
প্যাকেজের মধ্যে অন্তর্ভুক্ত করা tidyverse
প্যাকেজ। str_detect
প্রদান করে True
বা False
নির্দিষ্ট ভেক্টরটিতে কিছু নির্দিষ্ট স্ট্রিং রয়েছে কিনা তা দেখায়। এই বুলিয়ান মানটি ব্যবহার করে ফিল্টার করা সম্ভব। প্যাকেজ সম্পর্কে বিশদ জানতে স্ট্রিংারের পরিচিতি দেখুন stringr
।
library(tidyverse)
# ─ Attaching packages ──────────────────── tidyverse 1.2.1 ─
# ✔ ggplot2 2.2.1 ✔ purrr 0.2.4
# ✔ tibble 1.4.2 ✔ dplyr 0.7.4
# ✔ tidyr 0.7.2 ✔ stringr 1.2.0
# ✔ readr 1.1.1 ✔ forcats 0.3.0
# ─ Conflicts ───────────────────── tidyverse_conflicts() ─
# ✖ dplyr::filter() masks stats::filter()
# ✖ dplyr::lag() masks stats::lag()
mtcars$type <- rownames(mtcars)
mtcars %>%
filter(str_detect(type, 'Toyota|Mazda'))
# mpg cyl disp hp drat wt qsec vs am gear carb type
# 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4
# 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Mazda RX4 Wag
# 3 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 Toyota Corolla
# 4 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 Toyota Corona
স্ট্রিংর সম্পর্কে ভাল জিনিস
আমরা বরং ব্যবহার করা উচিত stringr::str_detect()
চেয়ে base::grepl()
। নিম্নলিখিত কারণগুলি রয়েছে কারণ এটি।
stringr
প্যাকেজ সরবরাহিত ফাংশনগুলি উপসর্গ দিয়ে শুরু হয় str_
, যা কোডটি পড়া সহজ করে তোলে।
stringr
প্যাকেজটির ক্রিয়াকলাপগুলির প্রথম যুক্তি সর্বদা ডেটা.ফ্রেম (বা মান) হয়, তারপরে প্যারামিটার আসে ((আপনাকে পাওলো ধন্যবাদ)
object <- "stringr"
# The functions with the same prefix `str_`.
# The first argument is an object.
stringr::str_count(object) # -> 7
stringr::str_sub(object, 1, 3) # -> "str"
stringr::str_detect(object, "str") # -> TRUE
stringr::str_replace(object, "str", "") # -> "ingr"
# The function names without common points.
# The position of the argument of the object also does not match.
base::nchar(object) # -> 7
base::substr(object, 1, 3) # -> "str"
base::grepl("str", object) # -> TRUE
base::sub("str", "", object) # -> "ingr"
মাপকাঠি
নিম্নরূপ মানদণ্ড পরীক্ষার ফলাফল। বড় ডেটাফ্রেমের জন্য, str_detect
দ্রুততর।
library(rbenchmark)
library(tidyverse)
# The data. Data expo 09. ASA Statistics Computing and Graphics
# http://stat-computing.org/dataexpo/2009/the-data.html
df <- read_csv("Downloads/2008.csv")
print(dim(df))
# [1] 7009728 29
benchmark(
"str_detect" = {df %>% filter(str_detect(Dest, 'MCO|BWI'))},
"grepl" = {df %>% filter(grepl('MCO|BWI', Dest))},
replications = 10,
columns = c("test", "replications", "elapsed", "relative", "user.self", "sys.self"))
# test replications elapsed relative user.self sys.self
# 2 grepl 10 16.480 1.513 16.195 0.248
# 1 str_detect 10 10.891 1.000 9.594 1.281
dplyr
, তবে সহায়তার দিকে তাকিয়ে?dplyr::filter
আমি কি এমন কিছু প্রস্তাব দেব যাfilter(df, !grepl("RTB",TrackingPixel))
সম্ভবত?