首页 > 解决方案 > 替换字符串中除一个之外的所有单词的问题

问题描述

我有一个简单的问题:

我有一列包含数千个值,我正在尝试将其转换为二分变量(是|否)。用“否”替换字符串很容易,因为我要转换的值是一个星号

Data$Complete <- gsub("\\*", "No", Data$Complete)

但是,当我尝试替换除“否”之外的所有内容时,以下代码将字符串中的所有内容替换为“是”。我不明白为什么它会像我指定的那样替换除“否”之外的所有内容:

Data$Complete <- Data[!Data$Complete %in% c("No"), "Complete"] <- "Yes" 

任何指针将不胜感激。

标签: rregexreplace

解决方案


您可以使用ifelse功能组合并grepl提取必要的数据,如下所示:

library(stringi)

# data simulation
set.seed(123)
n <- 1000
data <- data.frame(
  complete = stri_rand_strings(n = n, length = 20, pattern = "[A-Za-z0-9\\*]")
)

# string matching
data$yes_no <- ifelse(grepl("\\*", data$complete), "No", "Yes")
head(data)

输出:

              complete yes_no
1 HmOsw1WtXRxRfZ5tE1Jx    Yes
2 tgdzehXaH8xtgn0TkCJD    Yes
3 7PPM87DSFr1Qn6YC7ktM    Yes
4 e4NGoRoonQkch*SCMbL6     No
5 EfPm5QztsA7eKeJAm4SV    Yes
6 aJTxTtubO8vH2wi7XxZO    Yes

推荐阅读