【问题标题】:r + Search string and return valuesr + 搜索字符串并返回值
【发布时间】:2014-07-26 21:26:39
【问题描述】:

这是非常基本的,但我还没有找到一个简单的方法来做到这一点。假设我有以下数据框:

chars <- data.frame(type = c('ferrari_car--sport','ducati:bike:speed','honda:car_family','ninja_bike:speed','lambo_car','harley_bike'))

我想要的只是搜索此数据框的“类型”列中的每个值并创建另一列。如果文本包含“汽车”,则返回“汽车”;如果它包含“自行车”,则返回“摩托车”(最终我希望能够为一堆不同的值做到这一点)

我的方法是复制列,gsub "//car//" 为 "car"(同样适用于自行车),然后从两端剥离 "//"。

有更快/更简单的方法吗?

【问题讨论】:

    标签: regex r


    【解决方案1】:
    typestr <- c('ferrari_car','ducati_bike',
      'honda:trolley_family','ninja_bike:speed','lambo_car','harley_bike')
    
    library(stringr)
    xstr <- str_extract(typestr,"(trolley|car|bike)")
    rstr <- list(c("car","car"),c("bike","motorcycle"),c("trolley","trike"))
    for (r in rstr) xstr <- gsub(r[1],r[2],xstr)
    

    ifelse(grepl("bike",typestr),"motorcycle",
         ifelse(grepl("car",typestr),"car",
               ifelse(grepl("trolley",typestr),"trike",NA)))
    

    str_replace 可能有替代方案,或者使用Reduce() 使上面的示例更优雅...

    【讨论】:

    • 太棒了,谢谢本。你能稍微解释一下第一个选项的语法,用 gsub 和 str_extract 吗?如果我的数据框是 chars
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多