更改R中已过滤的data.frame中的一列中的所有值

Mac*_*lda 6 r stringr dplyr

我有一个非常混乱的数据框架,其中一列的值可以理解为人类而不是计算机,有点像下面的那样.

df<-data.frame("id"=c(1:10), 
           "colour"=c("re d", ", red", "re-d","green", "gre, en", ", gre-en",  "blu e", "green", ", blue", "bl ue"))
Run Code Online (Sandbox Code Playgroud)

我可以过滤掉df str_detect

df %>% filter(str_detect(tolower(colour), pattern = "gr")) 
Run Code Online (Sandbox Code Playgroud)

但我想将所有过滤后的结果重命名为相同的值,以便我可以纠缠它.
有什么建议?
我试图用模式分开,但没有成功.

编辑:不是全部.在我正在使用的df中不需要空格.让我们说在制作df中写绿色的正确方法是"gr.een".

编辑2:
想要的结果与伪造的颜色拼写只是为了得到一个想法:

id     colour
1      r. ed
2      r. ed
3      r. ed
4      gr. een
6      gr. een
7      gr. een
8      blu. e
9      gr. een           
10     blu. e
Run Code Online (Sandbox Code Playgroud)

Ant*_*osK 4

您可以使用mgsub多种模式替换多个单词:

df<-data.frame("id"=c(1:10), 
               "colour"=c("re d", ", red", "re-d","green", "gre, en", 
                          ", gre-en",  "blu e", "green", ", blue", "bl ue"))

library(textclean)

df$colour = mgsub(df$colour, 
                  pattern =  c(".*gr.*", ".*re.*", ".*bl.*"), 
                  replacement =  c("gr. een", "r. ed", "blu. e"), fixed = F)

df

#     id  colour
# 1   1   r. ed
# 2   2   r. ed
# 3   3   r. ed
# 4   4 gr. een
# 5   5 gr. een
# 6   6 gr. een
# 7   7  blu. e
# 8   8 gr. een
# 9   9  blu. e
# 10 10  blu. e
Run Code Online (Sandbox Code Playgroud)