使用 `stringr` 检测列表中的特定单词
Using `stringr` to detect specific words in a list
我正在处理一些如下所示的数据:
GameID EventID Route
<int> <int> <chr>
1 2793 15 Fade - Back Shoulder, Curl, Go/Fly, Out, Curl
2 2793 25 Go/Fly, Curl, Dig, Check & Release
3 2793 45 Fade, Swing - Left, Slant, Dig, Curl
4 2793 50 Jet Sweep Pass, Swing - Right
5 2793 55 Corner, Curl, Post, Curl, Slant
6 2793 60 Sluggo, Post, Curl, Chip - Flat, Flat - Left
7 2793 65 Go/Fly, Seam, Deep Cross, Dig, Flat - Right
8 2793 70 Curl, Dig, Post, Chip - Flat
9 2793 85 Curl, Seam, Curl, Dig, Curl
10 2793 95 Screen - RB
我正在尝试使用 str_detect
来查找 Routes
列中的组。
例如:
tare.route <- route.data %>%
filter(str_detect(Route, "Slant" & "Fade"))
但是,这样做时,出现以下错误:
Error: Problem with `filter()` input `..1`.
x operations are possible only for numeric, logical or complex types
i Input `..1` is `str_detect(Route, "Slant" & "Fade")`.
基本上,我试图使用上面的代码来提取每个 Route
观察结果,其中包括 JUST 我正在搜索的词(它们没有与数据中列出的顺序相同......它们只是 必须包含
如有任何帮助,我们将不胜感激。
数据的可重现示例
structure(list(GameID = c(2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L,
2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L,
2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L,
2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L,
2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L,
2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L,
2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L,
2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L), EventID = c(15L,
25L, 45L, 50L, 55L, 60L, 65L, 70L, 85L, 95L, 100L, 110L, 115L,
135L, 155L, 160L, 170L, 175L, 180L, 185L, 200L, 210L, 225L, 235L,
255L, 290L, 295L, 305L, 320L, 340L, 345L, 350L, 355L, 360L, 365L,
370L, 380L, 385L, 415L, 425L, 440L, 445L, 465L, 480L, 500L, 515L,
525L, 530L, 545L, 565L, 570L, 580L, 610L, 625L, 630L, 635L, 645L,
660L, 665L, 675L, 700L, 715L, 720L, 725L, 730L, 735L, 805L, 810L,
25L, 30L, 45L, 60L, 65L, 70L, 80L, 85L, 95L, 105L, 115L, 120L,
135L, 140L, 155L, 160L, 170L, 190L, 205L, 215L, 260L, 265L, 275L,
285L, 290L, 295L, 300L, 310L, 325L, 330L, 350L, 355L, 380L, 390L,
405L, 415L, 435L, 440L, 445L, 450L, 455L, 495L, 500L, 505L, 515L,
525L, 540L, 565L, 575L, 580L, 600L, 615L, 620L, 625L, 635L, 645L,
650L, 655L, 665L, 670L, 695L, 700L, 715L, 720L, 725L, 730L, 735L,
755L, 760L, 770L, 775L, 780L, 785L, 790L, 795L, 810L, 815L, 830L,
855L, 860L, 865L, 870L, 875L, 880L, 890L, 900L, 905L, 910L, 920L,
925L, 940L, 945L, 15L, 20L, 30L, 35L, 55L, 75L, 100L, 120L, 135L,
145L, 165L, 180L, 210L, 225L, 230L, 235L, 260L, 265L, 275L, 290L,
295L, 300L, 320L, 325L, 345L, 360L, 370L, 380L, 390L, 400L, 410L,
415L, 420L, 425L, 430L, 465L, 470L, 485L, 505L, 515L, 520L, 525L,
540L, 545L, 560L, 580L, 585L, 600L, 605L, 610L, 615L, 620L, 630L,
635L, 645L, 650L, 660L, 680L, 720L, 725L, 730L, 740L, 755L, 760L,
785L, 805L, 840L, 10L, 20L, 30L, 35L, 40L, 70L, 80L, 90L, 95L,
100L, 130L, 135L, 140L, 150L, 160L, 175L, 185L, 215L, 220L, 235L,
245L, 250L, 260L, 275L, 280L, 285L, 290L, 305L, 330L, 335L, 340L,
345L, 350L, 380L, 385L, 395L, 405L, 420L, 425L, 435L, 440L, 465L,
495L, 500L, 510L, 515L, 520L, 535L, 545L, 555L, 560L, 580L, 595L,
600L, 615L, 635L, 645L, 665L, 680L, 685L, 690L, 695L, 700L, 710L,
715L, 725L, 730L, 745L, 755L, 775L, 780L, 785L, 790L), Route = c("Fade - Back Shoulder, Curl, Go/Fly, Out, Curl",
"Go/Fly, Curl, Dig, Check & Release", "Fade, Swing - Left, Slant, Dig, Curl",
"Jet Sweep Pass, Swing - Right", "Corner, Curl, Post, Curl, Slant",
"Sluggo, Post, Curl, Chip - Flat, Flat - Left", "Go/Fly, Seam, Deep Cross, Dig, Flat - Right",
"Curl, Dig, Post, Chip - Flat", "Curl, Seam, Curl, Dig, Curl",
"Screen - RB", "Flat - Right, Fade, Out, Fade, Out", "Curl, Flat - Left, Dig",
"Deep Cross, Screen - Bubble, Post, Run Fake", "Curl, Curl, Curl",
"Swing - Left, Screen - TE, Screen - Bubble", "Curl, Flat - Left, Curl, Flat - Right",
"Flat - Right, Slant, Slant, Run Fake", "Run Fake, Beneath, Fade",
"Flat - Left, Swing - Right, Comeback, Deep Cross", "Curl, Post, Slant, Drag, Flat - Left",
"Swing - Right, Run Fake, Slant", "Curl, Fade, Dig, Dig, Flat - Right",
"Curl, Chip - Flat, Curl, Chip - Flat", "Chip - Drag, Go/Fly, Out, Dig, Chip - Flat",
"Curl, Slant, Flat - Left, Curl, Wheel", "Drag, Curl, Deep Cross, Drag, Flat - Left",
"Whip, Whip, Corner", "Screen - Tunnel, Run Fake", "Wheel, Deep Cross, Beneath, Run Fake, Seam",
"Post, Curl, Fade, Out, Chip - Flat", "Dig, Seam, Corner, Drag, Dig",
"Curl, Drag, Drag, Out, Swing - Left", "Dig, Dig, Fade, Out",
"Check & Release, Go/Fly, Seam, Fade, Seam", "Curl, Post, Drag, Out, Chip - Curl",
"Dig, Post, Curl, Go/Fly", "Curl, Slant, Slant, Corner, Swing - Right",
"Go/Fly, Corner, Out, Curl", "Fade, Out, Run Fake", "Slant, Slant, Dig, Out, Out",
"Screen - Bubble, Slant, Flat - Right", "Post, Wheel, Swing - Left, Post, Seam",
"Swing - Left, Dig, Run Fake", "Slant, Curl, Seam, Slant, Swing - Left",
"Out, Post, Out, Deep Cross, Check & Release", "Flat - Right, Swing - Left, Drag, Out",
"Dig, Flat - Left, Fade, Curl, Check & Release", "Dig, Deep Cross, Dig, Drag, Flat - Left",
"Drag, Deep Cross, Seam, Fade, Swing - Left", "Whip, Fade, Seam, Curl, Post",
"Dig, Out, Post, Drag", "Out, Out, Run Fake", "Over Ball, Pick, Drag, Curl, Swing - Right",
"Seam, Curl, Out, Slant, Fade", "Fade, Curl, Fade, Curl, Check & Release",
"Dig, Curl, Out, Fade, Fade", "Out, Go/Fly, Dig, Dig, Out", "Out, Flat - Right, Fade, Fade, Chip - Flat",
"Out, Curl, Out, Out", "Curl, Drag, Fade, Seam, Seam", "Curl, Drag, Corner, Slant, Flat - Left",
"Out, Fade, Fade, Go/Fly, Curl", "Go/Fly, Out, Post, Out, Hitch & Go",
"Curl, Slant, Fade, Screen - Tunnel", "Curl, Corner, Dig, Slant, Post",
"Out, Corner, Corner, Dig, Slant", "Dig, Out, Fade, Seam, Curl",
"Curl, Post, Curl, Fade, Curl", "Curl, Dig, Corner, Drag, Flat - Right",
"Check & Release, Corner, Chip - Flat, Dig, Chip - Flat", "Curl, Curl, Curl, Out, Chip - Flat",
"Deep Cross, Corner, Run Fake, Whip, Run Fake", "Dig, Go/Fly, Post, Go/Fly, Dig",
"Chip - Flat, Go/Fly, Go/Fly, Out, Slant", "Post, Wheel, Drag, Dig, Swing - Left",
"Screen - RB, Slant, Beneath", "Flat - Right, Fade, Go/Fly, Drag, Dig",
"Curl, Comeback, Curl, Slant, Slant", "Screen - Quick", "Beneath, Drag, Corner, Flat - Right",
"Whip, Post", "Comeback, Deep Cross, Flat - Left", "Go/Fly, Out, Curl, Dig, Flat - Right",
"Flat - Left, Slant, Curl, Dig, Flat - Right", "Go/Fly, Go/Fly, Fade, Dig, Screen - RB",
"Flat - Left, Curl, Deep Cross", "Out, Curl, Curl, Out", "Check & Release, Fade, Screen - Quick, Curl",
"Slant, Curl, Curl, Corner, Swing - Right", "Go/Fly, Curl, Go/Fly, Curl, Check & Release",
"Flat - Left, Deep Cross, Whip, Chip - Flat, Corner", "Slant, Curl, Go/Fly, Flat - Right",
"Deep Cross, Curl, Post, Screen - RB", "Screen - Tunnel, Swing - Left",
"Out, Drag, Dig, Fade", "Drag, Drag, Seam, Flat - Right", "Swing - Left, Deep Cross, Slant, Deep Cross, Go/Fly",
"Corner, Curl, Curl, Curl, Flat - Right", "Curl, Curl, Flat - Left, Corner, Flat - Right",
"Check & Release, Dig, Deep Cross, Deep Cross, Drag", "Curl, Post, Out, Seam, Quick",
"Swing - Left, Go/Fly, Drag, Go/Fly, Out", "Out, Curl, Over Ball, Out, Check & Release",
"Dig, Curl, Fade, Flat - Right, Swing - Left", "Curl, Curl, Curl, Curl, Curl",
"Chip - Flat, Post, Curl, Fade", "Curl, Flat - Right, Corner, Flat - Left, Corner",
"Check & Release, Curl, Dig, Dig, Flat - Right", "Dig, Flat - Left, Curl, Slant, Pick",
"Beneath, Deep Cross, Dig, Flat - Left", "Quick, Seam, Out, Go/Fly",
"Post, Slant, Go/Fly, Drag", "Hitch & Go, Curl, Post, Drag, Angle",
"Post, Seam, Deep Cross, Flat - Left, Chip - Drag", "Seam, Post, Go/Fly, Go/Fly, Drag",
"Check & Release, Drag, Out, Dig, Dig", "Screen - RB, Go/Fly, Deep Cross",
"Chip - Curl, Dig, Dig, Out, Out", "Flat - Right, Post, Out, Curl, Seam",
"Flat - Right, Out, Dig, Sluggo, Curl", "Corner, Screen - RB, Flat - Right",
"Run Fake, Slant, Screen - Bubble, Slant", "Go/Fly, Curl, Seam, Go/Fly, Out",
"Flat - Right, Corner, Curl, Over Ball", "Flat - Left, Deep Cross, Go/Fly",
"Run Fake, Deep Cross, Deep Cross", "Screen - Quick", "Wheel, Go/Fly, Drag, Go/Fly",
"Seam, Go/Fly, Chip - Drag, Drag, Chip - Flat", "Slant, Slant, Post, Slant",
"Angle, Dig, Post, Out, Drag", "Swing - Right, Corner, Out, Dig, Curl",
"Check & Release, Curl, Out, Over Ball, Curl", "Dig, Seam, Dig, Dig, Corner",
"Flat - Right, Corner, Flat - Left, Corner, Curl", "Wheel, Drag, Curl, Drag, Go/Fly",
"Drag, Go/Fly, Go/Fly, Seam, Chip - Flat", "Comeback, Dig, Flat - Left, Dig, Post",
"Slant, Over Ball, Slant, Slant, Flat - Left", "Out, Corner, Curl, Dig, Check & Release",
"Curl, Flat - Right, Dig, Curl, Seam", "Drag, Out, Out, Drag",
"Curl, Dig, Out, Curl", "Slant, Out, Go/Fly, Flat - Left, Sluggo",
"Post Corner, Whip, Drag, Beneath, Run Fake", "Go/Fly, Run Fake, Slant, Chip - Flat, Chip - Flat",
"Corner, Curl, Dig, Post, Out", "Out, Go/Fly, Post, Swing - Right, Curl",
"Curl, Slant, Flat - Right, Slant, Curl", "Corner, Chip - Flat, Corner, Chip - Flat, Curl",
"Curl, Post, Comeback, Curl, Seam", "Go/Fly, Curl, Post, Chip - Flat, Out",
"Slant, Flat - Left, Go/Fly, Go/Fly, Screen - RB", "Curl, Go/Fly, Go/Fly, Go/Fly, Seam",
"Flat - Right, Corner, Curl, Dig, Swing - Left", "Dig, Curl, Corner, Flat - Right, Swing - Left",
"Dig, Curl, Corner, Drag, Flat - Left", "Dig, Whip, Stick - Nod, Drag, Flat - Left",
"Seam, Go/Fly, Go/Fly, Go/Fly, Curl", "Go/Fly, Go/Fly, Go/Fly, Deep Cross",
"Curl, Curl, Curl, Curl, Out", "Curl, Seam, Curl, Seam, Over Ball",
"Go/Fly, Over Ball, Dig, Flat - Right, Angle", "Slant, Chip - Curl, Slant, Flat - Right",
"Screen - Bubble, Run Fake", "Drag, Flat - Right, Dig, Drag",
"Go/Fly, Out, Dig, Go/Fly, Out", "Wheel, Drag, Post, Deep Cross, Curl",
"Corner, Post", "Curl, Dig, Out, Seam, Curl", "Corner, Beneath, Run Fake",
"Curl, Corner, Chip - Drag, Flat - Left", "Go/Fly, Out, Dig, Slant, Seam",
"Go/Fly, Post", "Dig, Drag, Out, Go/Fly", "Beneath, Drag, Chip - Curl, Corner, Run Fake",
"Post, Curl, Curl, Post, Curl", "Dig, Dig, Seam, Go/Fly, Out",
"Dig, Post, Deep Cross, Chip - Drag", "Flat - Right, Out, Curl, Out",
"Drag, Corner, Corner, Run Fake", "Fade, Deep Cross, Seam, Chip - Drag",
"Curl, Comeback, Dig, Run Fake", "Go/Fly, Fade, Dig, Over Ball, Wheel",
"Corner, Chip - Flat, Curl, Out, Curl", "Slant, Dig, Out, Fade, Curl",
"Go/Fly, Dig, Out, Go/Fly, Chip - Curl", "Wheel, Whip, Curl, Flat - Left, Whip",
"Go/Fly, Go/Fly, Seam, Seam, Angle", "Curl, Corner, Flat - Left, Curl, Dig",
"Seam, Deep Cross, Angle, Go/Fly, Comeback", "Drag, Corner, Post, Dig, Flat - Right",
"Fade, Seam, Fade, Seam, Curl", "Out, Pick, Out, Deep Cross",
"Fade, Fade, Seam, Seam", "Slant, Slant, Fade, Out, Out", "Curl, Slant, Flat - Left, Corner, Curl",
"Post, Go/Fly, Curl, Flat - Left", "Out, Curl, Dig, Flat - Left, Comeback",
"Drag, Chip - Seam, Out, Post, Curl", "Go/Fly, Out, Chip - Drag, Go/Fly, Out",
"Dig, Seam, Curl, Dig", "Chip - Drag, Dig, Go/Fly, Dig", "Go/Fly, Swing - Right, Sluggo, Curl, Dig",
"Go/Fly, Dig, Deep Cross, Drag, Wheel", "Out, Corner, Chip - Flat",
"Chip - Flat, Post Corner, Corner, Dig", "Out, Go/Fly, Dig, Drag, Curl",
"Post, Curl, Deep Cross, Out", "Curl, Go/Fly, Go/Fly, Deep Cross, Go/Fly",
"Deep Cross, Slant, Screen - RB", "Slant, Dig, Corner, Drag",
"Out, Corner, Drag, Drag", "Go/Fly, Out & Up, Chip - Flat, Dig, Chip - Drag",
"Deep Cross, Beneath, Corner, Flat - Right, Run Fake", "Go/Fly, Out, Drag, Curl, Go/Fly",
"Whip, Curl, Post, Post, Curl", "Curl, Swing - Right, Fade, Seam, Seam",
"Dig, Dig, Post, Go/Fly, Check & Release", "Curl, Seam, Out, Curl, Curl",
"Out, Out, Out, Out, Curl", "Dig, Dig, Go/Fly", "Curl, Corner, Curl, Corner, Seam",
"Slant, Slant, Go/Fly, Flat - Right, Curl", "Out, Drag, Slant, Out, Out",
"Drag, Corner, Corner, Post", "Slant, Slant, Slant, Seam, Flat - Right",
"Drag, Dig, Corner, Out", "Dig, Out, Dig, Check & Release", "Out, Out, Go/Fly, Curl, Swing - Right",
"Go/Fly, Curl, Curl, Go/Fly, Curl", "Curl, Seam, Dig, Dig", "Out, Post, Out, Quick",
"Curl, Swing - Left, Curl", "Post, Slant, Fade, Run Fake", "Go/Fly, Wheel, Screen - TE, Run Fake",
"Curl, Post Corner, Whip, Corner, Curl", "Fade, Seam, Curl, Fade, Whip",
"Deep Cross, Go/Fly, Deep Cross", "Curl, Dig, Curl, Curl", "Go/Fly, Screen - Bubble, Screen - RB",
"Curl, Dig, Deep Cross, Swing - Right, Curl", "Fade, Seam, Out, Corner, Flat - Right",
"Fade, Chip - Flat, Dig, Curl", "Dig, Deep Cross, Drag, Corner, Swing - Right",
"Post, Go/Fly, Chip - Flat, Curl, Swing - Right", "Out, Curl, Post, Out, Out",
"Go/Fly, Fade, Comeback, Check & Release", "Angle, Go/Fly, Deep Cross, Go/Fly, Go/Fly",
"Swing - Right, Dig, Screen - RB", "Curl, Curl, Swing - Left",
"Run Fake, Out, Fade, Curl, Curl", "Angle, Out, Curl, Go/Fly, Check & Release",
"Go/Fly, Swing - Left, Screen - RB", "Screen - Quick, Slant, Screen - Tunnel, Run Fake",
"Dig, Dig, Dig, Seam, Swing - Left", "Curl, Go/Fly, Dig, Go/Fly",
"Out, Dig, Out, Curl, Flat - Right", "Screen - Quick, Out, Run Fake",
"Go/Fly, Slant, Drag, Curl", "Swing - Left, Deep Cross, Flat - Right",
"Drag, Deep Cross, Deep Cross, Swing - Left, Angle", "Whip, Corner Post, Whip, Corner, Curl",
"Go/Fly, Out & Up, Curl, Quick, Drag", "Out, Go/Fly, Deep Cross, Dig",
"Screen - Bubble", "Chip - Flat, Out, Go/Fly, Go/Fly", "Dig, Dig, Curl, Over Ball, Out",
"Screen - Quick, Screen - Tunnel", "Go/Fly, Out, Go/Fly", "Dig, Fade, Drag",
"Screen - Quick, Screen - Quick, Run Fake", "Screen - RB, Go/Fly, Curl, Out, Flat - Right",
"Comeback, Dig, Dig", "Chip - Flat, Drag, Curl, Go/Fly, Angle",
"Check & Release, Dig, Out & Up, Seam, Out", "Curl, Go/Fly, Post, Comeback, Out",
"Check & Release, Go/Fly, Seam, Go/Fly, Out", "Fade, Curl, Curl, Comeback, Flat - Right",
"Out, Post, Whip, Deep Cross, Dig", "Quick, Screen - Bubble",
"Go/Fly, Curl, Curl, Seam, Curl", "Check & Release, Dig, Curl, Post, Dig",
"Drag, Curl, Out, Drag, Wheel", "Swing - Left, Corner, Out, Dig, Curl",
"Swing - Right, Slant, Screen - TE", "Swing - Left, Fade, Screen - RB",
"Check & Release, Corner, Curl, Out", "Jet Sweep Pass, Run Fake",
"Drag, Comeback, Dig, Post, Chip - Seam", "Flat - Right, Curl, Curl, Curl, Fade",
"Chip - Curl, Dig, Out, Slant, Slant", "Run Fake, Beneath, Beneath, Deep Cross, Chip",
"Slant, Dig, Dig, Slant, Flat - Right", "Post, Post, Quick",
"Dig, Dig, Curl, Drag, Out", "Curl, Dig, Curl, Seam, Whip", "Chip - Flat, Curl, Go/Fly, Curl, Dig",
"Run Fake, Deep Cross, Chip - Flat, Corner", "Jet Sweep Pass, Run Fake"
)), row.names = c(NA, -300L), class = c("tbl_df", "tbl", "data.frame"
))
期望的结果
如果搜索仅包含倾斜和渐变的路线,我希望结果如下所示:
GameID EventID Route
1234 1234 Slant, Slant, Fade
...然后对于仅包含 Slants 和 Fades 的每个 EventID 依此类推。
创建一个模式以在任一方向进行检测
library(dplyr)
library(stringr)
route.data$Route[6] <- "Fade - Slant"
route.data %>%
filter(str_detect(Route,
"(\bSlant\b.*\bFade\b)|(\bFade\b.*\bSlant\b)")&
str_count(Route, "\w+") == 2)
GameID EventID Route
6 2793 60 Fade - Slant
也可以是多个表达式
route.data %>%
filter(str_detect(Route, "\bFade\b"),
str_detect(Route, "\Slant\b"),
str_count(Route, "\w+") == 2)
GameID EventID Route
6 2793 60 Fade - Slant
或者如果我们只想检查包含预期单词的行,提取单词,检查它们是否是唯一的
library(purrr)
route.data$Route[5] <- "Fade - Slant, Fade"
route.data %>%
filter(map_lgl(str_extract_all(Route, "\w+"), ~
all(unique(.x) %in% c("Fade", "Slant"), na.rm = TRUE)))
GameID EventID Route
5 2793 55 Fade - Slant, Fade
6 2793 60 Fade - Slant
数据
route.data <- structure(list(GameID = c(2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L), EventID = c(15L, 25L, 45L,
50L, 55L, 60L, 65L, 70L, 85L, 95L), Route = c("Fade - Back Shoulder, Curl, Go/Fly, Out, Curl",
"Go/Fly, Curl, Dig, Check & Release",
"Fade, Swing - Left, Slant, Dig, Curl",
"Jet Sweep Pass, Swing - Right",
"Corner, Curl, Post, Curl, Slant",
"Sluggo, Post, Curl, Chip - Flat, Flat - Left", "Go/Fly, Seam, Deep Cross, Dig, Flat - Right",
"Curl, Dig, Post, Chip - Flat", "Curl, Seam, Curl, Dig, Curl",
"Screen - RB")), class = "data.frame", row.names = c("1", "2",
"3", "4", "5", "6", "7", "8", "9", "10"))
您可以使用 separate_rows
将数据拆分为逗号和 select 那些 GameID
和 EventID
只有 Slant
和 Fade
中的值。
library(dplyr)
library(stringr)
library(tidyr)
df %>%
separate_rows(Route, sep = ',\s*') %>%
group_by(GameID, EventID) %>%
filter(all(Route %in% c('Slant', 'Fade'))) %>%
summarise(Route = toString(Route))
上面会寻找完全匹配,不会匹配像 Fade - Back Shoulder
这样的词。如果您想进行字符串匹配,请使用 str_detect
或 grepl
.
df %>%
separate_rows(Route, sep = ',\s*') %>%
group_by(GameID, EventID) %>%
filter(all(str_detect(Route, 'Slant') & str_detect(Route, 'Fade'))) %>%
summarise(Route = toString(Route))
我正在处理一些如下所示的数据:
GameID EventID Route
<int> <int> <chr>
1 2793 15 Fade - Back Shoulder, Curl, Go/Fly, Out, Curl
2 2793 25 Go/Fly, Curl, Dig, Check & Release
3 2793 45 Fade, Swing - Left, Slant, Dig, Curl
4 2793 50 Jet Sweep Pass, Swing - Right
5 2793 55 Corner, Curl, Post, Curl, Slant
6 2793 60 Sluggo, Post, Curl, Chip - Flat, Flat - Left
7 2793 65 Go/Fly, Seam, Deep Cross, Dig, Flat - Right
8 2793 70 Curl, Dig, Post, Chip - Flat
9 2793 85 Curl, Seam, Curl, Dig, Curl
10 2793 95 Screen - RB
我正在尝试使用 str_detect
来查找 Routes
列中的组。
例如:
tare.route <- route.data %>%
filter(str_detect(Route, "Slant" & "Fade"))
但是,这样做时,出现以下错误:
Error: Problem with `filter()` input `..1`.
x operations are possible only for numeric, logical or complex types
i Input `..1` is `str_detect(Route, "Slant" & "Fade")`.
基本上,我试图使用上面的代码来提取每个 Route
观察结果,其中包括 JUST 我正在搜索的词(它们没有与数据中列出的顺序相同......它们只是 必须包含
如有任何帮助,我们将不胜感激。
数据的可重现示例
structure(list(GameID = c(2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L, 2793L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L, 2794L,
2794L, 2794L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L,
2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L,
2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L,
2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L,
2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L,
2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L,
2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2795L,
2795L, 2795L, 2795L, 2795L, 2795L, 2795L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L,
2796L, 2796L, 2796L, 2796L, 2796L, 2796L, 2796L), EventID = c(15L,
25L, 45L, 50L, 55L, 60L, 65L, 70L, 85L, 95L, 100L, 110L, 115L,
135L, 155L, 160L, 170L, 175L, 180L, 185L, 200L, 210L, 225L, 235L,
255L, 290L, 295L, 305L, 320L, 340L, 345L, 350L, 355L, 360L, 365L,
370L, 380L, 385L, 415L, 425L, 440L, 445L, 465L, 480L, 500L, 515L,
525L, 530L, 545L, 565L, 570L, 580L, 610L, 625L, 630L, 635L, 645L,
660L, 665L, 675L, 700L, 715L, 720L, 725L, 730L, 735L, 805L, 810L,
25L, 30L, 45L, 60L, 65L, 70L, 80L, 85L, 95L, 105L, 115L, 120L,
135L, 140L, 155L, 160L, 170L, 190L, 205L, 215L, 260L, 265L, 275L,
285L, 290L, 295L, 300L, 310L, 325L, 330L, 350L, 355L, 380L, 390L,
405L, 415L, 435L, 440L, 445L, 450L, 455L, 495L, 500L, 505L, 515L,
525L, 540L, 565L, 575L, 580L, 600L, 615L, 620L, 625L, 635L, 645L,
650L, 655L, 665L, 670L, 695L, 700L, 715L, 720L, 725L, 730L, 735L,
755L, 760L, 770L, 775L, 780L, 785L, 790L, 795L, 810L, 815L, 830L,
855L, 860L, 865L, 870L, 875L, 880L, 890L, 900L, 905L, 910L, 920L,
925L, 940L, 945L, 15L, 20L, 30L, 35L, 55L, 75L, 100L, 120L, 135L,
145L, 165L, 180L, 210L, 225L, 230L, 235L, 260L, 265L, 275L, 290L,
295L, 300L, 320L, 325L, 345L, 360L, 370L, 380L, 390L, 400L, 410L,
415L, 420L, 425L, 430L, 465L, 470L, 485L, 505L, 515L, 520L, 525L,
540L, 545L, 560L, 580L, 585L, 600L, 605L, 610L, 615L, 620L, 630L,
635L, 645L, 650L, 660L, 680L, 720L, 725L, 730L, 740L, 755L, 760L,
785L, 805L, 840L, 10L, 20L, 30L, 35L, 40L, 70L, 80L, 90L, 95L,
100L, 130L, 135L, 140L, 150L, 160L, 175L, 185L, 215L, 220L, 235L,
245L, 250L, 260L, 275L, 280L, 285L, 290L, 305L, 330L, 335L, 340L,
345L, 350L, 380L, 385L, 395L, 405L, 420L, 425L, 435L, 440L, 465L,
495L, 500L, 510L, 515L, 520L, 535L, 545L, 555L, 560L, 580L, 595L,
600L, 615L, 635L, 645L, 665L, 680L, 685L, 690L, 695L, 700L, 710L,
715L, 725L, 730L, 745L, 755L, 775L, 780L, 785L, 790L), Route = c("Fade - Back Shoulder, Curl, Go/Fly, Out, Curl",
"Go/Fly, Curl, Dig, Check & Release", "Fade, Swing - Left, Slant, Dig, Curl",
"Jet Sweep Pass, Swing - Right", "Corner, Curl, Post, Curl, Slant",
"Sluggo, Post, Curl, Chip - Flat, Flat - Left", "Go/Fly, Seam, Deep Cross, Dig, Flat - Right",
"Curl, Dig, Post, Chip - Flat", "Curl, Seam, Curl, Dig, Curl",
"Screen - RB", "Flat - Right, Fade, Out, Fade, Out", "Curl, Flat - Left, Dig",
"Deep Cross, Screen - Bubble, Post, Run Fake", "Curl, Curl, Curl",
"Swing - Left, Screen - TE, Screen - Bubble", "Curl, Flat - Left, Curl, Flat - Right",
"Flat - Right, Slant, Slant, Run Fake", "Run Fake, Beneath, Fade",
"Flat - Left, Swing - Right, Comeback, Deep Cross", "Curl, Post, Slant, Drag, Flat - Left",
"Swing - Right, Run Fake, Slant", "Curl, Fade, Dig, Dig, Flat - Right",
"Curl, Chip - Flat, Curl, Chip - Flat", "Chip - Drag, Go/Fly, Out, Dig, Chip - Flat",
"Curl, Slant, Flat - Left, Curl, Wheel", "Drag, Curl, Deep Cross, Drag, Flat - Left",
"Whip, Whip, Corner", "Screen - Tunnel, Run Fake", "Wheel, Deep Cross, Beneath, Run Fake, Seam",
"Post, Curl, Fade, Out, Chip - Flat", "Dig, Seam, Corner, Drag, Dig",
"Curl, Drag, Drag, Out, Swing - Left", "Dig, Dig, Fade, Out",
"Check & Release, Go/Fly, Seam, Fade, Seam", "Curl, Post, Drag, Out, Chip - Curl",
"Dig, Post, Curl, Go/Fly", "Curl, Slant, Slant, Corner, Swing - Right",
"Go/Fly, Corner, Out, Curl", "Fade, Out, Run Fake", "Slant, Slant, Dig, Out, Out",
"Screen - Bubble, Slant, Flat - Right", "Post, Wheel, Swing - Left, Post, Seam",
"Swing - Left, Dig, Run Fake", "Slant, Curl, Seam, Slant, Swing - Left",
"Out, Post, Out, Deep Cross, Check & Release", "Flat - Right, Swing - Left, Drag, Out",
"Dig, Flat - Left, Fade, Curl, Check & Release", "Dig, Deep Cross, Dig, Drag, Flat - Left",
"Drag, Deep Cross, Seam, Fade, Swing - Left", "Whip, Fade, Seam, Curl, Post",
"Dig, Out, Post, Drag", "Out, Out, Run Fake", "Over Ball, Pick, Drag, Curl, Swing - Right",
"Seam, Curl, Out, Slant, Fade", "Fade, Curl, Fade, Curl, Check & Release",
"Dig, Curl, Out, Fade, Fade", "Out, Go/Fly, Dig, Dig, Out", "Out, Flat - Right, Fade, Fade, Chip - Flat",
"Out, Curl, Out, Out", "Curl, Drag, Fade, Seam, Seam", "Curl, Drag, Corner, Slant, Flat - Left",
"Out, Fade, Fade, Go/Fly, Curl", "Go/Fly, Out, Post, Out, Hitch & Go",
"Curl, Slant, Fade, Screen - Tunnel", "Curl, Corner, Dig, Slant, Post",
"Out, Corner, Corner, Dig, Slant", "Dig, Out, Fade, Seam, Curl",
"Curl, Post, Curl, Fade, Curl", "Curl, Dig, Corner, Drag, Flat - Right",
"Check & Release, Corner, Chip - Flat, Dig, Chip - Flat", "Curl, Curl, Curl, Out, Chip - Flat",
"Deep Cross, Corner, Run Fake, Whip, Run Fake", "Dig, Go/Fly, Post, Go/Fly, Dig",
"Chip - Flat, Go/Fly, Go/Fly, Out, Slant", "Post, Wheel, Drag, Dig, Swing - Left",
"Screen - RB, Slant, Beneath", "Flat - Right, Fade, Go/Fly, Drag, Dig",
"Curl, Comeback, Curl, Slant, Slant", "Screen - Quick", "Beneath, Drag, Corner, Flat - Right",
"Whip, Post", "Comeback, Deep Cross, Flat - Left", "Go/Fly, Out, Curl, Dig, Flat - Right",
"Flat - Left, Slant, Curl, Dig, Flat - Right", "Go/Fly, Go/Fly, Fade, Dig, Screen - RB",
"Flat - Left, Curl, Deep Cross", "Out, Curl, Curl, Out", "Check & Release, Fade, Screen - Quick, Curl",
"Slant, Curl, Curl, Corner, Swing - Right", "Go/Fly, Curl, Go/Fly, Curl, Check & Release",
"Flat - Left, Deep Cross, Whip, Chip - Flat, Corner", "Slant, Curl, Go/Fly, Flat - Right",
"Deep Cross, Curl, Post, Screen - RB", "Screen - Tunnel, Swing - Left",
"Out, Drag, Dig, Fade", "Drag, Drag, Seam, Flat - Right", "Swing - Left, Deep Cross, Slant, Deep Cross, Go/Fly",
"Corner, Curl, Curl, Curl, Flat - Right", "Curl, Curl, Flat - Left, Corner, Flat - Right",
"Check & Release, Dig, Deep Cross, Deep Cross, Drag", "Curl, Post, Out, Seam, Quick",
"Swing - Left, Go/Fly, Drag, Go/Fly, Out", "Out, Curl, Over Ball, Out, Check & Release",
"Dig, Curl, Fade, Flat - Right, Swing - Left", "Curl, Curl, Curl, Curl, Curl",
"Chip - Flat, Post, Curl, Fade", "Curl, Flat - Right, Corner, Flat - Left, Corner",
"Check & Release, Curl, Dig, Dig, Flat - Right", "Dig, Flat - Left, Curl, Slant, Pick",
"Beneath, Deep Cross, Dig, Flat - Left", "Quick, Seam, Out, Go/Fly",
"Post, Slant, Go/Fly, Drag", "Hitch & Go, Curl, Post, Drag, Angle",
"Post, Seam, Deep Cross, Flat - Left, Chip - Drag", "Seam, Post, Go/Fly, Go/Fly, Drag",
"Check & Release, Drag, Out, Dig, Dig", "Screen - RB, Go/Fly, Deep Cross",
"Chip - Curl, Dig, Dig, Out, Out", "Flat - Right, Post, Out, Curl, Seam",
"Flat - Right, Out, Dig, Sluggo, Curl", "Corner, Screen - RB, Flat - Right",
"Run Fake, Slant, Screen - Bubble, Slant", "Go/Fly, Curl, Seam, Go/Fly, Out",
"Flat - Right, Corner, Curl, Over Ball", "Flat - Left, Deep Cross, Go/Fly",
"Run Fake, Deep Cross, Deep Cross", "Screen - Quick", "Wheel, Go/Fly, Drag, Go/Fly",
"Seam, Go/Fly, Chip - Drag, Drag, Chip - Flat", "Slant, Slant, Post, Slant",
"Angle, Dig, Post, Out, Drag", "Swing - Right, Corner, Out, Dig, Curl",
"Check & Release, Curl, Out, Over Ball, Curl", "Dig, Seam, Dig, Dig, Corner",
"Flat - Right, Corner, Flat - Left, Corner, Curl", "Wheel, Drag, Curl, Drag, Go/Fly",
"Drag, Go/Fly, Go/Fly, Seam, Chip - Flat", "Comeback, Dig, Flat - Left, Dig, Post",
"Slant, Over Ball, Slant, Slant, Flat - Left", "Out, Corner, Curl, Dig, Check & Release",
"Curl, Flat - Right, Dig, Curl, Seam", "Drag, Out, Out, Drag",
"Curl, Dig, Out, Curl", "Slant, Out, Go/Fly, Flat - Left, Sluggo",
"Post Corner, Whip, Drag, Beneath, Run Fake", "Go/Fly, Run Fake, Slant, Chip - Flat, Chip - Flat",
"Corner, Curl, Dig, Post, Out", "Out, Go/Fly, Post, Swing - Right, Curl",
"Curl, Slant, Flat - Right, Slant, Curl", "Corner, Chip - Flat, Corner, Chip - Flat, Curl",
"Curl, Post, Comeback, Curl, Seam", "Go/Fly, Curl, Post, Chip - Flat, Out",
"Slant, Flat - Left, Go/Fly, Go/Fly, Screen - RB", "Curl, Go/Fly, Go/Fly, Go/Fly, Seam",
"Flat - Right, Corner, Curl, Dig, Swing - Left", "Dig, Curl, Corner, Flat - Right, Swing - Left",
"Dig, Curl, Corner, Drag, Flat - Left", "Dig, Whip, Stick - Nod, Drag, Flat - Left",
"Seam, Go/Fly, Go/Fly, Go/Fly, Curl", "Go/Fly, Go/Fly, Go/Fly, Deep Cross",
"Curl, Curl, Curl, Curl, Out", "Curl, Seam, Curl, Seam, Over Ball",
"Go/Fly, Over Ball, Dig, Flat - Right, Angle", "Slant, Chip - Curl, Slant, Flat - Right",
"Screen - Bubble, Run Fake", "Drag, Flat - Right, Dig, Drag",
"Go/Fly, Out, Dig, Go/Fly, Out", "Wheel, Drag, Post, Deep Cross, Curl",
"Corner, Post", "Curl, Dig, Out, Seam, Curl", "Corner, Beneath, Run Fake",
"Curl, Corner, Chip - Drag, Flat - Left", "Go/Fly, Out, Dig, Slant, Seam",
"Go/Fly, Post", "Dig, Drag, Out, Go/Fly", "Beneath, Drag, Chip - Curl, Corner, Run Fake",
"Post, Curl, Curl, Post, Curl", "Dig, Dig, Seam, Go/Fly, Out",
"Dig, Post, Deep Cross, Chip - Drag", "Flat - Right, Out, Curl, Out",
"Drag, Corner, Corner, Run Fake", "Fade, Deep Cross, Seam, Chip - Drag",
"Curl, Comeback, Dig, Run Fake", "Go/Fly, Fade, Dig, Over Ball, Wheel",
"Corner, Chip - Flat, Curl, Out, Curl", "Slant, Dig, Out, Fade, Curl",
"Go/Fly, Dig, Out, Go/Fly, Chip - Curl", "Wheel, Whip, Curl, Flat - Left, Whip",
"Go/Fly, Go/Fly, Seam, Seam, Angle", "Curl, Corner, Flat - Left, Curl, Dig",
"Seam, Deep Cross, Angle, Go/Fly, Comeback", "Drag, Corner, Post, Dig, Flat - Right",
"Fade, Seam, Fade, Seam, Curl", "Out, Pick, Out, Deep Cross",
"Fade, Fade, Seam, Seam", "Slant, Slant, Fade, Out, Out", "Curl, Slant, Flat - Left, Corner, Curl",
"Post, Go/Fly, Curl, Flat - Left", "Out, Curl, Dig, Flat - Left, Comeback",
"Drag, Chip - Seam, Out, Post, Curl", "Go/Fly, Out, Chip - Drag, Go/Fly, Out",
"Dig, Seam, Curl, Dig", "Chip - Drag, Dig, Go/Fly, Dig", "Go/Fly, Swing - Right, Sluggo, Curl, Dig",
"Go/Fly, Dig, Deep Cross, Drag, Wheel", "Out, Corner, Chip - Flat",
"Chip - Flat, Post Corner, Corner, Dig", "Out, Go/Fly, Dig, Drag, Curl",
"Post, Curl, Deep Cross, Out", "Curl, Go/Fly, Go/Fly, Deep Cross, Go/Fly",
"Deep Cross, Slant, Screen - RB", "Slant, Dig, Corner, Drag",
"Out, Corner, Drag, Drag", "Go/Fly, Out & Up, Chip - Flat, Dig, Chip - Drag",
"Deep Cross, Beneath, Corner, Flat - Right, Run Fake", "Go/Fly, Out, Drag, Curl, Go/Fly",
"Whip, Curl, Post, Post, Curl", "Curl, Swing - Right, Fade, Seam, Seam",
"Dig, Dig, Post, Go/Fly, Check & Release", "Curl, Seam, Out, Curl, Curl",
"Out, Out, Out, Out, Curl", "Dig, Dig, Go/Fly", "Curl, Corner, Curl, Corner, Seam",
"Slant, Slant, Go/Fly, Flat - Right, Curl", "Out, Drag, Slant, Out, Out",
"Drag, Corner, Corner, Post", "Slant, Slant, Slant, Seam, Flat - Right",
"Drag, Dig, Corner, Out", "Dig, Out, Dig, Check & Release", "Out, Out, Go/Fly, Curl, Swing - Right",
"Go/Fly, Curl, Curl, Go/Fly, Curl", "Curl, Seam, Dig, Dig", "Out, Post, Out, Quick",
"Curl, Swing - Left, Curl", "Post, Slant, Fade, Run Fake", "Go/Fly, Wheel, Screen - TE, Run Fake",
"Curl, Post Corner, Whip, Corner, Curl", "Fade, Seam, Curl, Fade, Whip",
"Deep Cross, Go/Fly, Deep Cross", "Curl, Dig, Curl, Curl", "Go/Fly, Screen - Bubble, Screen - RB",
"Curl, Dig, Deep Cross, Swing - Right, Curl", "Fade, Seam, Out, Corner, Flat - Right",
"Fade, Chip - Flat, Dig, Curl", "Dig, Deep Cross, Drag, Corner, Swing - Right",
"Post, Go/Fly, Chip - Flat, Curl, Swing - Right", "Out, Curl, Post, Out, Out",
"Go/Fly, Fade, Comeback, Check & Release", "Angle, Go/Fly, Deep Cross, Go/Fly, Go/Fly",
"Swing - Right, Dig, Screen - RB", "Curl, Curl, Swing - Left",
"Run Fake, Out, Fade, Curl, Curl", "Angle, Out, Curl, Go/Fly, Check & Release",
"Go/Fly, Swing - Left, Screen - RB", "Screen - Quick, Slant, Screen - Tunnel, Run Fake",
"Dig, Dig, Dig, Seam, Swing - Left", "Curl, Go/Fly, Dig, Go/Fly",
"Out, Dig, Out, Curl, Flat - Right", "Screen - Quick, Out, Run Fake",
"Go/Fly, Slant, Drag, Curl", "Swing - Left, Deep Cross, Flat - Right",
"Drag, Deep Cross, Deep Cross, Swing - Left, Angle", "Whip, Corner Post, Whip, Corner, Curl",
"Go/Fly, Out & Up, Curl, Quick, Drag", "Out, Go/Fly, Deep Cross, Dig",
"Screen - Bubble", "Chip - Flat, Out, Go/Fly, Go/Fly", "Dig, Dig, Curl, Over Ball, Out",
"Screen - Quick, Screen - Tunnel", "Go/Fly, Out, Go/Fly", "Dig, Fade, Drag",
"Screen - Quick, Screen - Quick, Run Fake", "Screen - RB, Go/Fly, Curl, Out, Flat - Right",
"Comeback, Dig, Dig", "Chip - Flat, Drag, Curl, Go/Fly, Angle",
"Check & Release, Dig, Out & Up, Seam, Out", "Curl, Go/Fly, Post, Comeback, Out",
"Check & Release, Go/Fly, Seam, Go/Fly, Out", "Fade, Curl, Curl, Comeback, Flat - Right",
"Out, Post, Whip, Deep Cross, Dig", "Quick, Screen - Bubble",
"Go/Fly, Curl, Curl, Seam, Curl", "Check & Release, Dig, Curl, Post, Dig",
"Drag, Curl, Out, Drag, Wheel", "Swing - Left, Corner, Out, Dig, Curl",
"Swing - Right, Slant, Screen - TE", "Swing - Left, Fade, Screen - RB",
"Check & Release, Corner, Curl, Out", "Jet Sweep Pass, Run Fake",
"Drag, Comeback, Dig, Post, Chip - Seam", "Flat - Right, Curl, Curl, Curl, Fade",
"Chip - Curl, Dig, Out, Slant, Slant", "Run Fake, Beneath, Beneath, Deep Cross, Chip",
"Slant, Dig, Dig, Slant, Flat - Right", "Post, Post, Quick",
"Dig, Dig, Curl, Drag, Out", "Curl, Dig, Curl, Seam, Whip", "Chip - Flat, Curl, Go/Fly, Curl, Dig",
"Run Fake, Deep Cross, Chip - Flat, Corner", "Jet Sweep Pass, Run Fake"
)), row.names = c(NA, -300L), class = c("tbl_df", "tbl", "data.frame"
))
期望的结果
如果搜索仅包含倾斜和渐变的路线,我希望结果如下所示:
GameID EventID Route
1234 1234 Slant, Slant, Fade
...然后对于仅包含 Slants 和 Fades 的每个 EventID 依此类推。
创建一个模式以在任一方向进行检测
library(dplyr)
library(stringr)
route.data$Route[6] <- "Fade - Slant"
route.data %>%
filter(str_detect(Route,
"(\bSlant\b.*\bFade\b)|(\bFade\b.*\bSlant\b)")&
str_count(Route, "\w+") == 2)
GameID EventID Route
6 2793 60 Fade - Slant
也可以是多个表达式
route.data %>%
filter(str_detect(Route, "\bFade\b"),
str_detect(Route, "\Slant\b"),
str_count(Route, "\w+") == 2)
GameID EventID Route
6 2793 60 Fade - Slant
或者如果我们只想检查包含预期单词的行,提取单词,检查它们是否是唯一的
library(purrr)
route.data$Route[5] <- "Fade - Slant, Fade"
route.data %>%
filter(map_lgl(str_extract_all(Route, "\w+"), ~
all(unique(.x) %in% c("Fade", "Slant"), na.rm = TRUE)))
GameID EventID Route
5 2793 55 Fade - Slant, Fade
6 2793 60 Fade - Slant
数据
route.data <- structure(list(GameID = c(2793L, 2793L, 2793L, 2793L, 2793L,
2793L, 2793L, 2793L, 2793L, 2793L), EventID = c(15L, 25L, 45L,
50L, 55L, 60L, 65L, 70L, 85L, 95L), Route = c("Fade - Back Shoulder, Curl, Go/Fly, Out, Curl",
"Go/Fly, Curl, Dig, Check & Release",
"Fade, Swing - Left, Slant, Dig, Curl",
"Jet Sweep Pass, Swing - Right",
"Corner, Curl, Post, Curl, Slant",
"Sluggo, Post, Curl, Chip - Flat, Flat - Left", "Go/Fly, Seam, Deep Cross, Dig, Flat - Right",
"Curl, Dig, Post, Chip - Flat", "Curl, Seam, Curl, Dig, Curl",
"Screen - RB")), class = "data.frame", row.names = c("1", "2",
"3", "4", "5", "6", "7", "8", "9", "10"))
您可以使用 separate_rows
将数据拆分为逗号和 select 那些 GameID
和 EventID
只有 Slant
和 Fade
中的值。
library(dplyr)
library(stringr)
library(tidyr)
df %>%
separate_rows(Route, sep = ',\s*') %>%
group_by(GameID, EventID) %>%
filter(all(Route %in% c('Slant', 'Fade'))) %>%
summarise(Route = toString(Route))
上面会寻找完全匹配,不会匹配像 Fade - Back Shoulder
这样的词。如果您想进行字符串匹配,请使用 str_detect
或 grepl
.
df %>%
separate_rows(Route, sep = ',\s*') %>%
group_by(GameID, EventID) %>%
filter(all(str_detect(Route, 'Slant') & str_detect(Route, 'Fade'))) %>%
summarise(Route = toString(Route))