我在一个数据帧中有一个字符向量,值超过500个--其中大约50个是同一事物的多次迭代(即“郁金香”和“小郁金香”和“郁金香”郁金香-新鲜的切分,然后类似的“玫瑰”“迷你玫瑰”“攀缘玫瑰”。
我希望将其转换为另一列,其中我指定每一列都成为“郁金香”或“玫瑰”,或者如果它们不匹配,则保持其先前的值。
例如,
H 117粉红Tulips
应该变成..。1.玫瑰2.牡丹3.郁金香4.玫瑰5.郁金香6.郁金香7.紫罗兰8.水仙花9.郁金香10.玫瑰
我已经尝试了大量的方法,使用mutate和lapply,grep和各种迭代,但都没有成功。有什么建议吗?这似乎是在R中做的一些基本的事情,但我一直在努力寻找一个解决方案
发布于 2020-02-02 01:18:16
这是字符串/正则表达式匹配和使用if_else或dplyr::case_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_detect和case_when在嵌套if_else语句上要快得多。
https://stackoverflow.com/questions/60011008
复制相似问题