【问题标题】:Conditional string replacement in rr中的条件字符串替换
【发布时间】:2021-10-19 05:06:15
【问题描述】:

我有一个数据框,其中包含一个包含由客户手写的经纪人名称的列,我想通过该列将手写的经纪人名称替换为我在列表中拥有的唯一经纪人名称。

我的数据的 sn-p 如下所示:

Data <- data.frame(Date = c("01-10-2020", "01-10-2020", "01-11-2020", "01-11-2020"), 
                   Broker = c("RealEstate", "REALestate", "Estate", "ESTATE"))

我的唯一经纪人名称列表如下所示:

Unique_brokers <- list("REALESTATE", "ESTATE")

基于某种模式识别,我想用我的Unique_brokers 列表中的唯一代理名替换我的Data 数据框中的代理名。

我已经部分地使用case_whenstr_detect 的组合手动完成了这项工作,分别来自dplyrstringr

Data <- Data %>%
   mutate("UniqueBroker" = case_when(str_detect(Broker, regex("realestate", ignore_case=T))~"REALEASTE",
                                  str_detect(Broker, regex("estate", ignore_case=T))~"ESTATE",
                                  TRUE~"OTHER"))

但是,在约 80.000 条记录中,超过 100 个唯一经纪人和超过 12500 个手写经纪人名称组合,这是相当耗时的。

我想知道是否可以使用 mapply 进行替换,但是到目前为止我还没有做到。

非常感谢!

编辑

Data$Broker由拼写、包含信息等方面的各种组合组成。

例如

Data$Broker <- c("Real-estate", "Real estate", "Real estate department 788", "Michael / REAL Estate")

【问题讨论】:

  • 这些答案对您有帮助吗?如果是这样,请考虑支持他们并接受一个。

标签: r string dplyr stringr mapply


【解决方案1】:

您可以将i 标志用于不区分大小写的正则表达式并使用str_replace_all -

library(stringr)

Unique_brokers <- c("REALESTATE", "ESTATE")

Data$Unique_brokers <-  str_replace_all(Data$Broker, 
                    setNames(Unique_brokers, str_c('(?i)', Unique_brokers)))

【讨论】:

    【解决方案2】:

    dplyrstringrsolution:

    Data %>%
      mutate(Broker_unique = if_else(str_detect(Broker, "(?i)real(-|\\s)?estate"), 
                                     "REALESTATE",
                                     "ESTATE"))
            Date                     Broker Broker_unique
    1 01-10-2020                Real-estate    REALESTATE
    2 01-10-2020                     estate        ESTATE
    3 01-11-2020 Real estate department 788    REALESTATE
    4 01-11-2020      Michael / REAL Estate    REALESTATE
    

    该模式的工作原理如下:

    • (?i):匹配不区分大小写
    • real:匹配文字real -(-|\\s)?:匹配 - (即一个空格)可选
    • estate: 匹配 estate 字面意思

    测试数据:

    Data <- data.frame(Date = c("01-10-2020", "01-10-2020", "01-11-2020", "01-11-2020"), 
                       Broker = c("RealEstate", "REALestate", "Estate", "ESTATE"))
    
    Data$Broker <- c("Real-estate", "estate", "Real estate department 788", "Michael / REAL Estate")
    

    【讨论】:

      猜你喜欢
      • 2021-10-08
      • 2014-03-13
      • 2015-08-23
      • 2016-10-02
      • 1970-01-01
      • 2014-08-17
      • 2015-02-02
      • 1970-01-01
      相关资源
      最近更新 更多