一点背景信息:我正在使用 impala 数据库,目前正在查询一个包含特定列(我将其称为正文)的大表,该列本质上包含文本段落。由于此查询的性质,我需要将一个文本挖掘器(使用正则表达式)嵌入到该正文列中,如果发现某些内容,它将发出某些指示符。使用 R,我可以使用 grepl 或 stringi 包的简单 stri_detect_regex 函数来很好地完成此操作,但需要注意的是,它迫使我事先收集我的表,因为这些子字符串检测函数不能直接翻译成 sql。
我正在寻找的是 R 的 grepl 的替代函数,它将输出 true/false 指示器来与我下面的代码一起使用(它可以满足我的需要),这样我就可以保持查询不被收集以优化运行时间:
DF_2 <- DF_1 %>%
collect() %>%
mutate(body = tolower(body),
indicator= ifelse(stri_detect_regex(body,"REGEX1"),"Y",
ifelse(stri_detect_regex(body,'REGEX2'),"ANALYSIS",
ifelse(stri_detect_regex(body,"REGEX3"),"RECOMMENDED","NULL")))) %>% select(...)
这里是一个 DF 示例,只是为了了解一些上下文:
DF1
身体 |
---|
文字1 |
文字2 |
文字3 |
期望的输出:
身体 | 指标 |
---|---|
文字1 | 是 |
文字2 | 空 |
文字3 | 分析 |
这只是一个非常简单的嵌套 ifelse 语句,它开始检查第一个正则表达式匹配,如果是,则打印 Y,如果不是,则检查第二个正则表达式匹配,依此类推...
这是我尝试的改编(没有达到我想要的效果):
DF_2 <- DF_1 %>%
mutate(body = tolower(body),
indicator= ifelse(sql("body RLIKE 'REGEX1'"),"Y",
ifelse(sql("body RLIKE 'REGEX2'"),"ANALYSIS",
ifelse(sql("body RLIKE 'REGEX3'"),"RECOMMENDED","NULL")))) %>% select(...)
由于某种原因,输出列(指示器)变成了变量类型布尔值的列,这让我相信我尝试用来替换 grepl 的函数没有执行与 grepl 函数相同的任务。是否有解决此问题的方法或者可能有更合适的函数可以完成我的需要?