我的表格中有很多不干净的数据:
abc
abc/def
abc/de
abc/d
abc/def/i j k
abc/def/i
abc/def/i j
这只是我想要改变的数据的一部分。这是更大的数据集的一部分。
我想将所有元素更改为abc/def/i j k
。
我使用了gsub()
函数,如下所示:
gsub('abc[a-z/]', 'abc/def/i j k', str)
输出:
abc/def/i j k
abc/def/i j k/def
abc/def/i j k/de
abc/def/i j k/d
问题在于它取代了任何模式的出现。
我得到足够好结果的唯一解决方案是我硬编码所有可能的选项,如:
gsub('abc$|abc/d$|abc/de$|abc/def/i$', 'abc/def/i j k', str)
但是,如果任何新数据存在差异,这将无效。 所以我想知道是否有可能在不对参数进行硬编码的情况下得到结果。
答案 0 :(得分:2)
您可以使用
x <- c("abc", "abc/def","abc/de","abc/d","abc/def/i j k","abc/def/i","abc/def/i j")
sub("^(abc)(?:/[^/]*)?", "\\1/def", x)
## => [1] "abc/def" "abc/def" "abc/def" "abc/def"
## [5] "abc/def/i j k" "abc/def/i" "abc/def/i j"
请参阅R demo
<强>详情:
^
- 字符串开头(abc)
- 第1组:abc
(?:/[^/]*)?
- 与以下序列匹配的可选组:
/
- /
[^/]*
- 除/