R - 使用 gsub() 替换字符串
R - replacing strings using gsub()
我在表格中有很多不干净的数据:
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)
但是,如果任何新数据发生变化,这将不起作用。
所以我想知道是否可以在不对参数进行硬编码的情况下获得结果。
您可以使用
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"
详情:
^
- 字符串开头
(abc)
- 第 1 组:abc
(?:/[^/]*)?
- 匹配以下序列的可选组:
/
- 一个/
[^/]*
- /
以外的 0+ 个字符
我在表格中有很多不干净的数据:
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)
但是,如果任何新数据发生变化,这将不起作用。 所以我想知道是否可以在不对参数进行硬编码的情况下获得结果。
您可以使用
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"
详情:
^
- 字符串开头(abc)
- 第 1 组:abc
(?:/[^/]*)?
- 匹配以下序列的可选组:/
- 一个/
[^/]*
-/
以外的 0+ 个字符