r - 在 R 中循环替换字符串/因子变量/向量中的字符

标签 r regex string

我有一列基本上看起来像以下字符串集:

v <- c("1 - IOP A", "1 - PHP B", "1 - RES C", "2 - IOP A", "2 - PHP B", "18 - IOP A", "18 - PHP A", "18 - RES D")

所有这些都是或将成为因素。我的数据集中有近 300 个。我的目标是将级别组合到仅由这些字母数字字符串的字母部分表示的类别中。从上面的示例中,所需的输出将是:

c("IOP A", "PHP B", "RES C", "PHP A", "RES D")

这是我尝试过的,但它不起作用,没有提供错误消息,没有任何变化,而且我不确定为什么或下一步该做什么/出了什么问题。我假设它与在字符串模式参数中使用循环索引有关,但我不知道如何告诉程序使用索引值。

for (i in 1:18) {
    sub(pattern = "i - ", replacement = "", v)
}

如果有人向我展示最优雅甚至多种方法来完成此任务,我将不胜感激,因为这是一项非常基本的数据工程任务。我确信还有一种更快的 sapply 方法来编写此代码。

谢谢:)

最佳答案

您可以删除 "-" 之前的所有内容并获取唯一 值。

unique(sub('.*-\\s', '', v))
#[1] "IOP A" "PHP B" "RES C" "PHP A" "RES D"

或者与您的尝试类似,将 \\d 作为数字的占位符。

unique(sub('\\d+ - ', '', v))

这里不需要 sapplyfor 循环,因为 sub/gsub 已矢量化,因此它们可以工作直接向量。

关于r - 在 R 中循环替换字符串/因子变量/向量中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62988591/

相关文章:

r - 无法使用 knitr2html 使用 kable/kableExtra 获得漂亮的 table

r - ggplot facet wrap 变量作为函数中的参数

javascript - 如何在不弄乱特殊字符的情况下将用户输入的值转换为正则表达式?

java - SpEL表达式利用 "contains()"字符串方法

javascript - === 和 == 如何以不同方式处理 null 比较?

r - dplyr 自连接与过滤器

JavaScript/使用系统生成的正则表达式进行验证

python - 颜色编码字符串的正则表达式

java - 两个字符串相等,但不适用于 if 语句

r - 从 R 连接到 azure blob 存储 API 时出错