R:弦的割等价物

R:弦的割等价物,r,stringr,R,Stringr,我有一份不同类型口罩的清单,我想把它们分为N95、外科、布料或其他类型 df<-data.frame(mask_type= c("Surgical Mask (3M 1800)", "N95 FFR (Wilson 1105N) (2x 3mm leaks)",

我有一份不同类型口罩的清单,我想把它们分为N95、外科、布料或其他类型

     df<-data.frame(mask_type=
c("Surgical Mask (3M 1800)",                                                                      
     "N95 FFR (Wilson 1105N) (2x 3mm leaks)",                                                        
     "N95 FFR (San Huei United Company 1895N) (2x 3mm leaks)",                                       
     "Surgical Mask (Primed  PG4-1073) (2x 3mm leaks)",                                              
     "Surgical Mask (3M 1800) (2x 3mm leaks)",                                                       
     "N95 FFR (Wilson 1105N) (4x 3mm leaks)",                                                        
     "Cloth FFR (San Huei United Company 1895N) (4x 3mm leaks)",                                       
     "Cloth Mask (Primed  PG4-1073) (4x 3mm leaks)") 

如果字符串中存在任何图案
'Surgical | N95 | Cloth'
,请使用
str|u extract
进行提取。如果其中任何一个都不存在,它将返回
NA
,可以用
“其他”
替换

library(dplyr)
library(stringr)

df %>%
  mutate(TYPE= str_extract(mask_type, regex('Surgical|N95|Cloth', ignore_case = TRUE)), 
         TYPE = replace(TYPE, is.na(TYPE), 'Other'))

如果字符串中存在任何图案
'Surgical | N95 | Cloth'
,请使用
str|u extract
进行提取。如果其中任何一个都不存在,它将返回
NA
,可以用
“其他”
替换

library(dplyr)
library(stringr)

df %>%
  mutate(TYPE= str_extract(mask_type, regex('Surgical|N95|Cloth', ignore_case = TRUE)), 
         TYPE = replace(TYPE, is.na(TYPE), 'Other'))

我们可以使用
base R

lst1 <- with(df, regmatches(mask_type, gregexpr('Surgical|N95|Cloth', mask_type)))
df$TYPE <- sapply(lst1, function(x) if(length(x) == 0) 'Other' else x)

lst1我们可以使用
base R

lst1 <- with(df, regmatches(mask_type, gregexpr('Surgical|N95|Cloth', mask_type)))
df$TYPE <- sapply(lst1, function(x) if(length(x) == 0) 'Other' else x)

谢谢你,罗纳克。我发现它在抱怨“找不到函数regex”。这是另一个包裹里的吗?我看了stringr的页面,它似乎是内置的,所以我有点困惑。有什么想法吗?真奇怪。是的,它来自
stringr
,因此如果您加载了该包,它应该可以正常工作,不会出现任何错误。我用它使正则表达式不区分大小写。您可以检查答案而不必填写
TYPE=str_extract(mask_TYPE,'Surgical | N95 | Cloth')
再次感谢您的帮助。如果我使用require(stringr)而不是stringr::str_extract,它就可以正常工作。奇怪,不是吗?如果您使用
库(stringr)
,也可以正常工作。谢谢Ronak。我发现它在抱怨“找不到函数regex”。这是另一个包裹里的吗?我看了stringr的页面,它似乎是内置的,所以我有点困惑。有什么想法吗?真奇怪。是的,它来自
stringr
,因此如果您加载了该包,它应该可以正常工作,不会出现任何错误。我用它使正则表达式不区分大小写。您可以检查答案而不必填写
TYPE=str_extract(mask_TYPE,'Surgical | N95 | Cloth')
再次感谢您的帮助。如果我使用require(stringr)而不是stringr::str_extract,它就可以正常工作。如果您使用
library(stringr)
,那么奇数,否?也可以正常工作。