str_使用外部对象模式检测(以整洁的方式)
我想优化我的代码 我正在使用str_使用外部对象模式检测(以整洁的方式),r,pattern-matching,tidyverse,R,Pattern Matching,Tidyverse,我想优化我的代码 我正在使用str\u detect进行大量选择,因为我想优化我的代码,以便将来我想选择,基于外部定义的对象定义一个过滤器模式。我可以这样做,但我必须使用as.character()来剥离到对象。有可能以整洁的方式做吗 演示该问题的工作示例。这是经典的方法,它是有效的 > tbl %>% mutate(twentys = case_when( + str_detect(fruit, "20") ~ T) ) # A tibble: 4 x 3
str\u detect
进行大量选择,因为我想优化我的代码,以便将来我想选择,基于外部定义的对象定义一个过滤器模式。我可以这样做,但我必须使用as.character()
来剥离到对象。有可能以整洁的方式做吗
演示该问题的工作示例。这是经典的方法,它是有效的
> tbl %>% mutate(twentys = case_when(
+ str_detect(fruit, "20") ~ T) )
# A tibble: 4 x 3
x fruit twentys
<int> <chr> <lgl>
1 1 apple 20 TRUE
2 2 banana 20 TRUE
3 3 pear 10 NA
4 4 pineapple 10 NA
如果不想将
twenth
转换为字符,可以使用grepl
library(dplyr)
tbl %>% mutate(twentys = case_when(grepl(twenty, fruit) ~ TRUE))
# x fruit twentys
#1 1 apple 20 TRUE
#2 2 banana 20 TRUE
#3 3 pear 10 NA
#4 4 pineapple 10 NA
数据
tbl <- structure(list(x = 1:4, fruit = c("apple 20", "banana 20", "pear 10",
"pineapple 10")), class = "data.frame", row.names = c(NA, -4L))
twenty <- 20
tbl我们可以使用stru-detect
library(dplyr)
library(stringr)
tbl %>%
mutate(twenty = case_when(str_detect(fruit, str_c(twenty)) ~ TRUE))
或使用paste
tbl %>%
mutate(twenty = case_when(str_detect(fruit, paste(twenty)) ~ TRUE))
数据
tbl您看到我的第三个选项了吗?因为我使用作为.character()
。我在找更整洁的东西。因此,我提出了关于代码优化的问题。@Eric抱歉,在您的问题中没有检查它。我更新了str_c
谢谢。它不同于as.character()
,但不太整洁。使用Ronak Shah的解决方案,我根本不需要包装我的外部对象,但它是一个基本的R选项
library(dplyr)
library(stringr)
tbl %>%
mutate(twenty = case_when(str_detect(fruit, str_c(twenty)) ~ TRUE))
tbl %>%
mutate(twenty = case_when(str_detect(fruit, paste(twenty)) ~ TRUE))
tbl <- structure(list(x = 1:4, fruit = c("apple 20", "banana 20", "pear 10",
"pineapple 10")), class = "data.frame", row.names = c(NA, -4L))
twenty <- 20