替换包含模式 "No" 的多个字符串

Replacing multiple strings that contain the pattern "No"

查看(有些)繁忙的调查数据,我想使用 stringR 和 str_replace() 将“否”的所有变体变成单个“否”。挑战在于我一直观察到“不,不,不”之类的观察结果,直到连续 9 次。

str_replace() 或其他函数能否同时收集所有这些变化?或者我应该纠正许多 str_replace 命令?

这是数据框的代表:

library(tidyverse)
library(stringr)
library(reprex)

dfr <- dput(global_filtered_numeric$x48_enforcement_participation [157:169])

dfr

[1] "No, No, No, No"                                           
 [2] "No"                                                       
 [3] "yes"                                                      
 [4] "yes"                                                      
 [5] "No"                                                       
 [6] "No"                                                       
 [7] "No"                                                       
 [8] "yes"                                                      
 [9] "yes, Yes male, yes, yes, Yes male, Yes female, Yes female"
[10] "yes, yes"                                                 
[11] "yes, yes"                                                 
[12] "No"                                                       
[13] "No"          

首先 post/Reprex - 所以我将测试 df 是否真的与 dput 一起出现!

此处无需超出 R 基数:

vec <- c("No, No, No, No", "No", "yes", "yes", "No", "No", "No", "yes", "yes, Yes male, yes, yes, Yes male, Yes female, Yes female", "yes, yes", "yes, yes", "No", "No")
ifelse(nchar(gsub("[no, ]", "", vec, ignore.case = TRUE)), vec, "no")
#  [1] "no"                                                        "no"                                                       
#  [3] "yes"                                                       "yes"                                                      
#  [5] "no"                                                        "no"                                                       
#  [7] "no"                                                        "yes"                                                      
#  [9] "yes, Yes male, yes, yes, Yes male, Yes female, Yes female" "yes, yes"                                                 
# [11] "yes, yes"                                                  "no"                                                       
# [13] "no"                                                       

使用 r2evans 的 vec,您还可以使用 gsub,如:

> gsub("N[Oo].+", "No", vec)
 [1] "No"                                                       
 [2] "No"                                                       
 [3] "yes"                                                      
 [4] "yes"                                                      
 [5] "No"                                                       
 [6] "No"                                                       
 [7] "No"                                                       
 [8] "yes"                                                      
 [9] "yes, Yes male, yes, yes, Yes male, Yes female, Yes female"
[10] "yes, yes"                                                 
[11] "yes, yes"                                                 
[12] "No"                                                       
[13] "No"