我正在尝试为我的数据框创建搜索键列。我想从我的数据框列中提取某些字符串模式,以用于沿着数据框的长度创建新的搜索关键字列。例如:
x <- c(1:4)
y <- c("BLUE,BALL","BALL,RED","BIG,GREEN,BALL","BALL")
dat <- data.frame(x,y)
给出,
>dat
x y
1 BLUE,BALL
2 BALL,RED
3 BIG,GREEN,BALL
4 BALL
现在我想基于dat $ y中颜色模式的出现在数据框中创建一个新的搜索关键列。我想用:
pattern="RED|GREEN|BLUE"
对于任何'pat'未在dat $ y中被识别的情况,我想在元素位置留空或'NA'。我希望我的结果如下所示:
>new.dat
x y search.color
1 BLUE,BALL BLUE
2 BALL,RED RED
3 BIG,GREEN,BALL GREEN
4 BALL NA
我用过
dat$first <-do.call(rbind,lapply(strsplit(dat[,2],split=" "), function(x) head(x,1)))
用于在我的数据框中创建第一个单词搜索键过滤器,但现在我正在搜索允许使用grepl或其他方法更多控制选择搜索键的方法。非常感谢任何帮助或资源。
答案 0 :(得分:4)
stringr::str_extract
应该轻松做你想做的事。
pat <- "(RED|GREEN|BLUE)"
dat <- transform(dat,search.color=stringr::str_extract(y,pat))
## dat
## x y search.color
## 1 1 BLUE,BALL BLUE
## 2 2 BALL,RED RED
## 3 3 BIG,GREEN,BALL GREEN
## 4 4 BALL <NA>
我确信还有一个基础R gsub()
解决方案,但对我来说并不那么明显......
答案 1 :(得分:3)
我们也可以使用gregexpr/regmatches
base R
dat$search.color <- sapply(regmatches(dat$y,gregexpr(pat, dat$y)),`[`,1)
dat$search.color
#[1] "BLUE" "RED" "GREEN" NA
pat <- "(RED|GREEN|BLUE)"