সমাধান
এটা ব্যবহার করা সম্ভব 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))সম্ভবত?