【发布时间】:2016-12-15 10:48:38
【问题描述】:
我正在尝试使用多个正则表达式创建一些简单且易于编写的内容集群。
想象一个字符串列表:c("a","b","ac") 我需要定义的组是“All:a's”和“All:b's”。所以值“a”和“ac”是“A”,“b”是“B”。
myDF$contentGroup <- sub(".*a.*", "A", myDF$stringList)
但是,如果未发生匹配,这将导致我的数据框“contentGroup”中包含“stringList”的值。因此,如果我使用“B”执行同一行代码,它将覆盖“A”。
myDF$contentGroup <- sub(".*b.*", "B", myDF$stringList)
我只是想不出如何在一行代码中进行简单的聚类。让它尽可能简单。
【问题讨论】:
-
grepl()将完成这项工作。x <- c("a","b","ac"); x[grepl("a|A",x)]这是你想要的吗? -
x[grep('a', x, fixed = TRUE)] <- 'A'; x[grep('b', x, fixed = TRUE)] <- 'B' -
^ 不要忘记在这些语句中添加
fixed = TRUE以提高 ~X10 的性能 -
@joel.wilson 因为解析正则表达式比查找精确匹配要复杂得多。经验法则是,如果
sub或grep在其pattern参数中没有任何表达式,而是一个普通字符串,请始终使用fixed = TRUE -
有人需要将答案从 cmets 移动到答案