Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用文本匹配改变列_R_Dataframe_Dplyr_Apply_Mutate - Fatal编程技术网

R 使用文本匹配改变列

R 使用文本匹配改变列,r,dataframe,dplyr,apply,mutate,R,Dataframe,Dplyr,Apply,Mutate,我在一个大于500个值的数据框中有一个字符向量,其中大约50个是同一事物的多次迭代(即“郁金香”、“小郁金香”和“郁金香”郁金香-鲜切”,然后是类似的“玫瑰”“迷你玫瑰”“攀缘玫瑰”) 我想将其转换为另一列,在该列中,我指定其中的每一个都成为“郁金香”或“玫瑰”,或者如果不匹配,则保持其先前的值 比如说, 迷你玫瑰 牡丹花 郁金香 红玫瑰 小郁金香 郁金香-新鲜采摘 紫罗兰色 水仙花 粉色郁金香 玫瑰 应该成为。。。 1.罗斯 2.牡丹 3.郁金香 4.罗斯 5.郁金香 6.郁金香 7.紫罗兰色

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

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

比如说,

  • 迷你玫瑰
  • 牡丹花
  • 郁金香
  • 红玫瑰
  • 小郁金香
  • 郁金香-新鲜采摘
  • 紫罗兰色
  • 水仙花
  • 粉色郁金香
  • 玫瑰
  • 应该成为。。。 1.罗斯 2.牡丹 3.郁金香 4.罗斯 5.郁金香 6.郁金香 7.紫罗兰色 8.水仙花 9.郁金香 10.罗斯


    我用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中问题。