【问题标题】:Add value in one column based on multiple key words in another column in r根据r中另一列中的多个关键字在一个列中添加值
【发布时间】:2020-11-06 11:14:04
【问题描述】:

我想做以下事情:如果“名称”列中存在关键字“GARAGE”、“PARKING”、“LOT”,那么我会将值“Parking&Garage”添加到“类型”列中。

这是数据集:

df<-data.frame(Name=c("GARAGE 1","GARAGE 2", "101 GARAGE","PARKING LOT","CENTRAL PARKING","SCHOOL PARKING 1","CITY HALL"))

以下代码对我来说效果很好,但是有没有一种巧妙的方法可以使代码更短?谢谢!

df$Type[grepl("GARAGE", df$Name) | 
                       grepl("PARKING", df$Name) |
                          grepl("LOT", df$Name)]<-"Parking&Garage"

【问题讨论】:

  • 之所以想找一个简洁的方式是因为我可能有更多的关键字。理想情况下,我正在考虑创建一个关键字列表并立即使用“grepl”。但我不知道该怎么做......

标签: r


【解决方案1】:

正则表达式“或”运算符 |你的朋友在这里吗:

df$Type[grepl("GARAGE|PARKING|LOT", df$Name)]<-"Parking&Garage"

【讨论】:

    【解决方案2】:

    您可以创建要更改的关键字列表、动态创建模式并替换值。

    keywords <- c('GARAGE', 'PARKING', 'LOT')
    df$Type <- NA
    df$Type[grep(paste0(keywords, collapse = '|'), df$Name)] <- "Parking&Garage"
    df
    
    #              Name           Type
    #1         GARAGE 1 Parking&Garage
    #2         GARAGE 2 Parking&Garage
    #3       101 GARAGE Parking&Garage
    #4      PARKING LOT Parking&Garage
    #5  CENTRAL PARKING Parking&Garage
    #6 SCHOOL PARKING 1 Parking&Garage
    #7        CITY HALL           <NA>
    

    如果您以后需要向列表中添加更多关键字,这将很有帮助。

    【讨论】:

      【解决方案3】:

      dpylr 和 stringr 包的替代方案:

      library(stringr)
      library(dplyr)
      
      df %>% 
        dplyr::mutate(TYPE = stringr::str_detect(Name, "GARAGE|PARKING|LOT"),
                  TYPE = ifelse(TYPE == TRUE, "Parking&Garage", NA_character_))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多