【发布时间】:2020-10-05 09:09:05
【问题描述】:
我有一个数据框,其中有一列字符串,如下所示:
String_Column Rating
Greenyy 1
BigGREENglow 2
BLUEBERRY 8
Shiny Emeralds 3
Sky Blue 3
Skyblue 6
CERULEAN 2
Blueish Green 5
BLOO 3
我想为这些值创建分组,所以如果它有一个与绿色同义的词或包含绿色这个词的任何变体,我想将它分组为“绿色”。蓝色也一样。
所以我希望上面看起来像这样:
String_Column Grouping Rating
Greenyy Green 1
BigGREENglow Green 2
BLUEBERRY Blue 8
Shiny Emeralds Green 3
Sky Blue Blue 3
Skyblue Blue 6
CERULEAN Blue 2
Blueish Green Green 5
BLOO Not Found 3
我创建了一个蓝色列表和一个绿色列表,其中包含与每个相关的单词。
Blue_List <- c("Blue", "BLUE", "blue", "Cerulean" , "CERULEAN", "cerulean" , "Sapphire", "sapphire" , "SAPPHIRE")
Green_List <- c("Green", "GREEN", "green", "Chartreuse", "CHARTREUSE", "chartreuse", "Emerald", "emerald", "EMERALD")
然后我想根据每个字符串是否在此列表中将其分组为蓝色或绿色。 并将此列添加到数据框中。如果该值不包含在列表中,则返回“未找到”
我已经能够做到这一点,
DF$Grouping<-ifelse(grepl("TRUE",sapply(DF$String_Column, grepl, Green_List,ignore.case=TRUE, simplify=FALSE)), "Green" ,
grepl("TRUE",sapply(DF$String_Column, grepl, Blue_List,ignore.case=TRUE, simplify=FALSE)),"Blue" ,"Not Found")
但是,我需要保留分组的顺序,我不知道该怎么做。 对于“蓝绿色”的示例,我希望将其归类为绿色,但在读取 else 子句时将其放入蓝色分组中。
我想我可以将 ifelse 重新排序为首先具有“蓝色”,但实际数据集比我共享的要复杂一些,并且我最终希望对数据集的子集执行每个“else” '不是事先分组。
任何帮助将不胜感激!谢谢!
【问题讨论】:
标签: r list if-statement sapply grepl