R 使用文本匹配改变列
我在一个大于500个值的数据框中有一个字符向量,其中大约50个是同一事物的多次迭代(即“郁金香”、“小郁金香”和“郁金香”郁金香-鲜切”,然后是类似的“玫瑰”“迷你玫瑰”“攀缘玫瑰”) 我想将其转换为另一列,在该列中,我指定其中的每一个都成为“郁金香”或“玫瑰”,或者如果不匹配,则保持其先前的值 比如说,R 使用文本匹配改变列,r,dataframe,dplyr,apply,mutate,R,Dataframe,Dplyr,Apply,Mutate,我在一个大于500个值的数据框中有一个字符向量,其中大约50个是同一事物的多次迭代(即“郁金香”、“小郁金香”和“郁金香”郁金香-鲜切”,然后是类似的“玫瑰”“迷你玫瑰”“攀缘玫瑰”) 我想将其转换为另一列,在该列中,我指定其中的每一个都成为“郁金香”或“玫瑰”,或者如果不匹配,则保持其先前的值 比如说, 迷你玫瑰 牡丹花 郁金香 红玫瑰 小郁金香 郁金香-新鲜采摘 紫罗兰色 水仙花 粉色郁金香 玫瑰 应该成为。。。 1.罗斯 2.牡丹 3.郁金香 4.罗斯 5.郁金香 6.郁金香 7.紫罗兰色
我用mutate、lappy、grep和各种迭代方法尝试了很多次,但都没有成功。有什么建议吗?这似乎是在R中需要做的基本工作,但我一直在努力寻找解决方案这是一个字符串/regex匹配和分配新(或旧变量)的简单例子使用
if\u else
或dplyr::case\u when
。以下是实现此目的的几种方法之一:
library(tidyverse)
library(stringi)
flower_data = tibble(flower = c("Type of Rose", "Type of Tulip", "Other Flower"))
flower_data %>%
mutate(new_flower = case_when(
stringi::stri_detect_regex(flower, "[Rr]ose") ~ "Rose",
stringi::stri_detect_regex(flower, "[Tt]ulip") ~ "Tulip",
TRUE ~ flower
))
我喜欢
stringi
的实现,因为我发现它比stringr::str\u detect
和case\u在if\u else
语句上嵌套时快得多,因为可读性。请创建一个可复制的示例,使用dput
将表格作为可复制文本导出,并将其包含在q中问题。