r - 循环替换R中字符串/因子变量/向量中的字符
问题描述
我有一个基本上看起来像以下字符串集的列:
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
取值。
unique(sub('.*-\\s', '', v))
#[1] "IOP A" "PHP B" "RES C" "PHP A" "RES D"
或类似于您的尝试,\\d
作为数字的占位符。
unique(sub('\\d+ - ', '', v))
您不需要sapply
或for
在此处循环,因为sub
/gsub
已矢量化,因此它们直接在矢量上工作。
推荐阅读
- php - 如何通过 Web 套接字将 Dart Map 对象发送到 PHP 服务器?
- python - 使用 XL 翅膀将 1 列从 100 个不同的 Excel 路径复制到 1 个 Excel 文件
- node.js - 有没有办法根据记录的会话类型制作不同的捆绑包?
- rust - 如何从 Rust 调用内置 Dyon 函数?
- java - 比较两个具有唯一结果的列表
- unity3d - Unity 的 YUV 着色器?
- scala - 根据存在/不存在的元素将 2 个序列分成三个
- javascript - asp.net 更改当前 URL 中的参数以获取 href
- shell - 如何执行 Unix shell 脚本?
- java - 将文件与日期关联以查询特定日期范围,Java(Android)?