首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:字符串的Cut equivalent

R:字符串的Cut equivalent
EN

Stack Overflow用户
提问于 2021-02-19 18:17:39
回答 2查看 35关注 0票数 1

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

代码语言:javascript
复制
     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)") 

这样做可以过滤掩码,但不会创建“其他”列。你觉得我离得远吗?

需要(Dplyr)需要(Tidyr)

代码语言:javascript
复制
df %>%
  mutate(TYPE=stringr::str_detect(mask_type,"N95 | surgical | cloth")) %>%
  filter(TYPE=TRUE) %>%
  select(mask_type)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-19 18:24:50

如果字符串中存在任何模式'Surgical|N95|Cloth',则使用str_extract进行提取。如果都不存在,它将返回可以用'Other'替换的NA

代码语言:javascript
复制
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'))
票数 2
EN

Stack Overflow用户

发布于 2021-02-20 02:42:19

我们可以使用base R

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66275681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档