这是非常基本的,但我还没有找到一种简单的方法。假设我有以下数据框:
chars <- data.frame(type = c('ferrari_car--sport','ducati:bike:speed','honda:car_family','ninja_bike:speed','lambo_car','harley_bike'))
我想要的只是搜索此数据框的“类型”列中的每个值并创建另一列。如果文本中包含“car”则返回“car”;如果它包含“自行车”然后返回“摩托车”(最终我希望能够为一堆不同的值做到这一点)
我的方法是复制列,gsub“// car //”用于“car”(同样用于自行车),然后从任一端剥离“//”。
有更快/更简单的方法吗?
答案 0 :(得分:2)
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()
使上面的示例更加优雅......