R 有没有办法把一个字符向量中的特定字符串分离出来,然后放到另一个向量中

R 有没有办法把一个字符向量中的特定字符串分离出来,然后放到另一个向量中,r,R,我的数据帧输出中有一个名为make的字符向量: make <- c("AUDI", "HUSQVARNA","SYM","LEXMOTO","LDV","APOLLO","AUDI R8 SPYDER QUATTRO V10", "MITSUBISHI FUSO","JEEP GRAND CHEROKEE LIMITED

我的数据帧输出中有一个名为make的字符向量:

make <- c("AUDI", "HUSQVARNA","SYM","LEXMOTO","LDV","APOLLO","AUDI R8 SPYDER QUATTRO V10", "MITSUBISHI FUSO","JEEP GRAND CHEROKEE LIMITED CRD A")
我知道我可以像这样分开字符串:

Output$model <- gsub(".* ", '', output$make)

Output$model我们可以使用
tidyr::extract
将数据分成两列。第一列包含
“AUDI”
(如果存在)或整个字符串,第二列包含
“AUDI”
(如果存在)之后的所有内容,否则为空

tidyr::extract(df, make, c('model', 'make'), '(AUDI|.*)\\s?(.*)')

#                              model                  make
#1                              AUDI                      
#2                         HUSQVARNA                      
#3                               SYM                      
#4                           LEXMOTO                      
#5                               LDV                      
#6                            APOLLO                      
#7                              AUDI R8 SPYDER QUATTRO V10
#8                   MITSUBISHI FUSO                      
#9 JEEP GRAND CHEROKEE LIMITED CRD A                      
数据

df <- data.frame(make = make)
df考虑一下:

Output$model <- stringr::str_extract(Output$make, "(?<=AUDI ).*")
使用基本R输出$model:

> df <- data.frame(make = c("AUDI", "HUSQVARNA","SYM","LEXMOTO","LDV","APOLLO","AUDI R8 SPYDER QUATTRO V10", "MITSUBISHI FUSO","JEEP GRAND CHEROKEE LIMITED CRD A"))
> df$model <- ''
> df$model[grep('AUDI ',df$make)] <- gsub('AUDI\\s(.*)','\\1', df$make[grep('AUDI ',df$make)])
> df
                               make                 model
1                              AUDI                      
2                         HUSQVARNA                      
3                               SYM                      
4                           LEXMOTO                      
5                               LDV                      
6                            APOLLO                      
7        AUDI R8 SPYDER QUATTRO V10 R8 SPYDER QUATTRO V10
8                   MITSUBISHI FUSO                      
9 JEEP GRAND CHEROKEE LIMITED CRD A                      
> 
>df$车型df$车型[grep('AUDI',df$make)]df
制作模型
1奥迪
2 HUSQVARNA
3 SYM
4莱克斯莫托
5 LDV
6阿波罗
7奥迪R8 SPYDER QUATTRO V10 R8 SPYDER QUATTRO V10
8三菱扶桑
9吉普大切诺基有限公司CRD A
> 

a非常感谢!如果您想像本例一样提取两个不同的字符串,同时提取“GRAND CHEROKEE LIMITED CRD A”,您将如何处理这个问题来自吉普车型。@DylanJohnson请在问题中包含您希望包含的所有模式,而不是在评论中扩展它们。A非常感谢!如果您想像本例一样提取两个不同的字符串,同时从吉普车型中提取“GRAND CHEROKEE LIMITED CRD A”,您将如何解决这个问题Dylan Johnson 7分钟前删除使用此模式
”(?A非常感谢!如果您想像本例那样提取两个不同的字符串,同时从吉普车型中提取“GRAND CHEROKEE LIMITED CRD A”,您将如何处理此问题。-Dylan Johnson 7分钟前删除
                               make                 model
1                              AUDI                  <NA>
2                         HUSQVARNA                  <NA>
3                               SYM                  <NA>
4                           LEXMOTO                  <NA>
5                               LDV                  <NA>
6                            APOLLO                  <NA>
7        AUDI R8 SPYDER QUATTRO V10 R8 SPYDER QUATTRO V10
8                   MITSUBISHI FUSO                  <NA>
9 JEEP GRAND CHEROKEE LIMITED CRD A                  <NA>
> df <- data.frame(make = c("AUDI", "HUSQVARNA","SYM","LEXMOTO","LDV","APOLLO","AUDI R8 SPYDER QUATTRO V10", "MITSUBISHI FUSO","JEEP GRAND CHEROKEE LIMITED CRD A"))
> df$model <- ''
> df$model[grep('AUDI ',df$make)] <- gsub('AUDI\\s(.*)','\\1', df$make[grep('AUDI ',df$make)])
> df
                               make                 model
1                              AUDI                      
2                         HUSQVARNA                      
3                               SYM                      
4                           LEXMOTO                      
5                               LDV                      
6                            APOLLO                      
7        AUDI R8 SPYDER QUATTRO V10 R8 SPYDER QUATTRO V10
8                   MITSUBISHI FUSO                      
9 JEEP GRAND CHEROKEE LIMITED CRD A                      
>