【发布时间】:2022-01-05 21:33:12
【问题描述】:
我有一个 data.table,我想确定一组代码是否存在于特定字符列中。我将模式作为值向量传递给%like%,如图所示。这种语法对我有用;但是,我想强制 %like% 函数将模式向量的每个元素视为文字,即不使用 . 作为正则表达式通配符。 data.table的手册说like函数可以设置为fixed = TRUE。有没有办法可以强制我的代码使用%like% 将. 和.. 视为文字而不是通配符?谢谢。 J
这有效,但处理“。”错误地作为通配符:
Codes <- c("65E..|9OX..|9OX1.|9OX2.|9OX3.|9OXZ.|Xaa9G")
ActualCodes <- dt[code_id %like% Codes]
这不是:
Codes <- c("65E..|9OX..|9OX1.|9OX2.|9OX3.|9OXZ.|Xaa9G")
ActualCodes <- dt[code_id %like% Codes, fixed = TRUE]
【问题讨论】:
-
你可以试试
dt[like(code_id, Codes, fixed = TRUE)]。问题似乎是fixed = TRUE被视为j而不是like的参数。此外,|将在fixed = TRUE中被视为字面意思。没有一个可重复的小例子就不清楚 -
我猜最好的选择是逃避你的
.,即Codes <- gsub(".", "\\.", Codes, fixed = TRUE),然后使用第一个选项 -
谢谢。我试过这个,但没有运气,无法通过转义“。”来使其工作。在代码中,使用“\\.”或如以下建议所示, "[.]" 。两者似乎都不适用于类似的功能,但很好的尝试。
标签: r regex data.table subset