R data.table %like% 逻辑与
R data.table %like% with logical AND
我正在尝试构建一个作为搜索引擎的 Shiny 应用程序。
我根据搜索关键字返回 data.table:
DT <- data.table(field = c("A_B_C","A_C_D","A_D_A","B_A_D","B_C_F","B_D_K"))
DT[field %like% "A|B"]
以上returns所有包含A OR B的字段。
如果我想要 A 和 B:
DT[field %like% "A"][field %like% "B"]
是否有一种语法可以让我对任意数量的关键字执行上述操作。
类似于:
DT[field %like% "A & B & C"]
如果只有两个元素,分别比较,然后&
对数据集进行子集化
DT[field %like% "A" & field %like% "B"]
# field
#1: A_B_C
#2: B_A_D
如果要比较的字符串很多,请使用 Reduce
和 Map
。
DT[Reduce(`&`, Map(`%like%`, list(field), c("A", "B")))]
# field
#1: A_B_C
#2: B_A_D
或者您可以使用 Perl 风格的 正则表达式,结合 grepl
在您的 data.table
:
pat <- "(?=.*A)(?=.*B)"
DT[grep(pat, field, perl = TRUE),]
# field
#1: A_B_C
#2: B_A_D
我正在尝试构建一个作为搜索引擎的 Shiny 应用程序。 我根据搜索关键字返回 data.table:
DT <- data.table(field = c("A_B_C","A_C_D","A_D_A","B_A_D","B_C_F","B_D_K"))
DT[field %like% "A|B"]
以上returns所有包含A OR B的字段。 如果我想要 A 和 B:
DT[field %like% "A"][field %like% "B"]
是否有一种语法可以让我对任意数量的关键字执行上述操作。 类似于:
DT[field %like% "A & B & C"]
如果只有两个元素,分别比较,然后&
对数据集进行子集化
DT[field %like% "A" & field %like% "B"]
# field
#1: A_B_C
#2: B_A_D
如果要比较的字符串很多,请使用 Reduce
和 Map
。
DT[Reduce(`&`, Map(`%like%`, list(field), c("A", "B")))]
# field
#1: A_B_C
#2: B_A_D
或者您可以使用 Perl 风格的 正则表达式,结合 grepl
在您的 data.table
:
pat <- "(?=.*A)(?=.*B)"
DT[grep(pat, field, perl = TRUE),]
# field
#1: A_B_C
#2: B_A_D