【发布时间】:2019-05-21 20:47:10
【问题描述】:
我有一个非常混乱的数据框,其中一列的值是人类可以理解但计算机无法理解的,有点像下面的那个。
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"))
我可以用str_detect过滤df
df %>% filter(str_detect(tolower(colour), pattern = "gr"))
但我想将所有过滤后的结果重命名为相同的值,以便对其进行处理。
有什么建议吗?
我试图用模式分开,但没有成功。
编辑:不是全部。我正在使用的 df 中不需要空格。可以说,在组成的 df 中写绿色的正确方法是“gr.een”。
EDIT2:
想要的结果是伪造的颜色拼写只是为了得到一个想法:
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
【问题讨论】:
-
为什么不(预先)处理
colour列并在过滤之前将其更新为有意义的内容?试试这个df$colour = gsub("[^[:alnum:] ]", "", df$colour); df$colour = gsub(" ", "", df$colour),它将删除所有非字母数字值和空格。 -
或
df %>% mutate(colour2 = gsub("[^a-zA-Z]", "", colour)) -
...还请注意,(a)对于本示例,您不需要
tolower,(b)您使用的模式不会选择像g-reen或 @987654330 这样的值@。这就是为什么我建议您在过滤之前对您的列进行预处理。 -
@AntoniosK 在我使用的 df 中,并非所有非字母数字值和空格都是不必要的。不幸的是。
-
那么我想你可以尽可能多地预处理数据。关于您上面的问题,您想为过滤结果分配什么值?
gr. een?