基于grepl的ifelse语句

时间:2016-01-13 12:10:46

标签: r

我有以下数据框:

address <- c("Weg", "Laan", "Molenweg")
b <- seq(1:3)
df <- data.frame(address, b)

我现在要做的是看地址是否包含某个单词然后标记列。像这样:

df_weg <- df$address
x <- c("weg")
df$test <- ifelse(grepl(x, df_weg), 1, 0)

这很好但我正在寻找一种方法,当单词在列表中时,将项目标记为0/1。所以它应该像这样工作:

x <- c("weg", "laan")
df$test <- ifelse(grepl(x, df_weg), 1, 0)

但是当我尝试这个时,我收到以下错误:

Warning message:
In grepl(x, df_weg) :
argument 'pattern' has length > 1 and only the first element will be used

我对如何使这项工作有任何想法?

1 个答案:

答案 0 :(得分:4)

您可以尝试以下表达式:

x <- "weg|laan" # or paste(c("weg", "laan"), collapse="|")
df$test <- ifelse(grepl(x, df_weg), 1, 0)
|中的

regex表示“或”

作为一种更直接的方式,感谢@DavidArenburg,因为您需要0/1输出,您只需将grepl的逻辑结果转换为整数:

as.integer(grepl("weg|laan", df_weg))

或者,如果你想做代码转换(但不太好的实践):

+grepl("weg|laan", df_weg)