首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用文本匹配的可变列

使用文本匹配的可变列
EN

Stack Overflow用户
提问于 2020-01-31 20:46:46
回答 1查看 197关注 0票数 0

我在一个数据帧中有一个字符向量,值超过500个--其中大约50个是同一事物的多次迭代(即“郁金香”和“小郁金香”和“郁金香”郁金香-新鲜的切分,然后类似的“玫瑰”“迷你玫瑰”“攀缘玫瑰”。

我希望将其转换为另一列,其中我指定每一列都成为“郁金香”或“玫瑰”,或者如果它们不匹配,则保持其先前的值。

例如,

  • Tulip

  • Red

  • Violet

  • Daffodil

  • 小郁金香

  • 郁金香-鲜摘

  • Violet

  • Daffodil

H 117粉红Tulips

  • Roses

应该变成..。1.玫瑰2.牡丹3.郁金香4.玫瑰5.郁金香6.郁金香7.紫罗兰8.水仙花9.郁金香10.玫瑰

我已经尝试了大量的方法,使用mutate和lapply,grep和各种迭代,但都没有成功。有什么建议吗?这似乎是在R中做的一些基本的事情,但我一直在努力寻找一个解决方案

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-02 01:18:16

这是字符串/正则表达式匹配和使用if_elsedplyr::case_when分配一个新变量(或旧变量)的简单情况。以下是您可以这样做的一种方法:

代码语言:javascript
复制
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_detectcase_when在嵌套if_else语句上要快得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60011008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档