R中的if else语句中的正则表达式

时间:2018-06-14 13:50:19

标签: r regex if-statement

我有一个相当简单的问题。我试图让下面的if else声明工作。

如果满足if语句,则应该分配'1',否则为0。 我的问题是我无法在if语句中使用正则表达式('\ w * | \ W *)。它应该指定字符串要么是“需要注册”要么注册要求后跟任何字符。我无法指定确切的情况,因为遵循“需要注册”(在随后的情况下),它通常是一个日期(每个观察不同)和几个单词。

Registration_cleaned <- c()

for (i in 1:length(Registration)) {
  if (Registration[i] == ' Registration Required\\w*|\\W*') {
    Meta_Registration_cleaned <- 1
  } else {
    Meta_Registration_cleaned <- 0 
  }

 Registration_cleaned <- c(Registration_cleaned, Meta_Registration_cleaned)

}

2 个答案:

答案 0 :(得分:0)

您可以将变换与ifelse函数一起使用来设置Meta_Registration_cleaned。 为了匹配正则表达式,grep函数可以使用模式“Registration Required \ w *”。

Registration <- data.frame(reg = c("Registration Required", "Registration Required ddfdqf","some str", "Regixxstration Required ddfdqf"),stringsAsFactors = F)

transform(Registration,Meta_Registration_cleaned = ifelse(grepl("Registration Required\\w*",Registration[,"reg"]), 1, 0))

给出结果:

                      reg Meta_Registration_cleaned
1          Registration Required                         1
2   Registration Required ddfdqf                         1
3                       some str                         0
4 Regixxstration Required ddfdqf                         0

答案 1 :(得分:0)

我可能完全误解了OP,因为我完全不同于其他任何人理解这个问题。

我之前的评论建议在字符串的 end 处查找正则表达式。

Registration <- data.frame(reg = c("Registration Required", "Registration Required ddfdqf","Registration Required 10/12/2000"),stringsAsFactors = F)

#thanks @user1653941 for drafting the sample vector

Registration$Meta_Registration_cleaned <- grepl('Registration required$', Registration$reg, ignore.case = TRUE)

Registration

1            Registration Required                      TRUE
2     Registration Required ddfdqf                     FALSE
3 Registration Required 10/12/2000                     FALSE

我理解OP的条件是:字符串“需要注册”而不跟随字符,或者......其他任何内容。期待OP的评论。