【问题标题】:Issues with replacing all words in a string except one替换字符串中除一个以外的所有单词的问题
【发布时间】:2018-07-19 10:38:53
【问题描述】:

我有一个简单的问题:

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

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

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

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

任何指针将不胜感激。

【问题讨论】:

  • 你可能应该做一个可重现的例子
  • 尝试使用ifelse 并用一个命令替换它们:ifelse(grepl("\\*", foo), "No", "Yes")
  • 反正你有两个&lt;-。试试Data[!Data$Complete %in% c("No"), "Complete"] &lt;- "Yes"
  • 如果你只需要比较一个值,"No",你不需要%in%,你应该使用==

标签: r regex replace


【解决方案1】:

您可以使用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

【讨论】:

    猜你喜欢
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2013-05-29
    • 1970-01-01
    • 2013-03-17
    相关资源
    最近更新 更多