根据R中的部分匹配替换整个表达式

时间:2017-11-09 19:15:59

标签: r

我有一个带有因子变量的数据框。我想搜索一个模式并替换包含至少部分匹配的所有结果。

clrs <- c("blue", "light blue", "red", "rose", "ruby", "yellow", "green", "black", "brown", "royal blue")
dfx <- data.frame(colors=clrs, Amount=sample(100,10))
dfx

       colors Amount
1        blue     23
2  light blue     95
3         red     45
4        rose     46
5        ruby     63
6      yellow      9
7       green     33
8       black     62
9       brown     34
10 royal blue     18

在这个例子中,我想在colors变量中找到包含单词blue的记录,并用&#34; Blue&#34;替换整个内容。

所以我的结果应该是这样的......

       colors Amount
1        Blue     23
2        Blue     95
3         red     45
4        rose     46
5        ruby     63
6      yellow      9
7       green     33
8       black     62
9       brown     34
10       Blue     18

我使用grep找到了我要替换的那些

grep("blue", dfx$colors, value = TRUE)

[1] "blue"       "light blue" "royal blue"

我尝试过使用gsub:

gsub("blue", "Blue", dfx$colors)

但这并没有改变任何事情。

我已尝试在此网站上发布过类似问题的其他帖子,包括此内容......

R - Replace entire strings based on partial match

但是没有一个答案似乎有效。

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

这是您链接到的问题的第一个答案。只需使用

dfx$colors[grepl("blue", dfx$colors)] <- "Blue"

使用grepl为向量中的每个元素返回TRUE / FALSE值。

另外,请确保您的列是字符变量而不是首先因素

dfx$colors < - as.character(dfx$colors)