Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何从数据框中的列中提取字符串模式,并创建包含提取字符串的新数据框列?_R - Fatal编程技术网

R 如何从数据框中的列中提取字符串模式,并创建包含提取字符串的新数据框列?

R 如何从数据框中的列中提取字符串模式,并创建包含提取字符串的新数据框列?,r,R,我正在尝试为我的数据框创建搜索键列。我想从数据帧列中提取某些字符串模式,用于沿数据帧的长度创建新的搜索键列。例如: x <- c(1:4) y <- c("BLUE,BALL","BALL,RED","BIG,GREEN,BALL","BALL") dat <- data.frame(x,y) 现在,我想根据dat$y中出现的颜色模式在数据框中创建一个新的搜索键列。我想使用: pattern="RED|GREEN|BLUE" 对于dat$y中未识别“pat”的任何实

我正在尝试为我的数据框创建搜索键列。我想从数据帧列中提取某些字符串模式,用于沿数据帧的长度创建新的搜索键列。例如:

x <- c(1:4)
y <- c("BLUE,BALL","BALL,RED","BIG,GREEN,BALL","BALL")
dat <- data.frame(x,y)
现在,我想根据dat$y中出现的颜色模式在数据框中创建一个新的搜索键列。我想使用:

    pattern="RED|GREEN|BLUE"
对于dat$y中未识别“pat”的任何实例,我希望在元素处保留为空或“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)))

dat$first
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>

pat我们也可以使用
gregexpr/regmatches
from
base R

dat$search.color <- sapply(regmatches(dat$y,gregexpr(pat, dat$y)),`[`,1)
dat$search.color
#[1] "BLUE"  "RED"   "GREEN" NA     

dat$search.color谢谢。这是一个非常好的解决方案。是否可以使用上述解决方案为分类创建搜索关键字列。例如,对于dat$y中包含类似
ifelse(grepl((RED | GREEN | BLUE),y),“color”,“no_color”)
(或
NA
,或任何您想要的可选值)的字符串,不返回“color”,而不是用户定义图案中的颜色。是否可以使用[colors()]在R中用于从专栏中提取颜色的函数?你应该问新问题,而不是在评论中继续问新问题…是的,我也在想同样的事情。很抱歉。谢谢,谢谢。我将提出与上面另一个解决方案相同的问题。是否可以使用上述解决方案为分类创建搜索关键字列。例如,不是返回提取的模式,而是为dat$y中包含pat@ryry看起来BenBolker在评论中回答了这个问题。
dat$search.color <- sapply(regmatches(dat$y,gregexpr(pat, dat$y)),`[`,1)
dat$search.color
#[1] "BLUE"  "RED"   "GREEN" NA     
pat <- "(RED|GREEN|BLUE)"