我有以下数据框:
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
我对如何使这项工作有任何想法?
答案 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)