我有以下数据:
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有什么想法可以让我这样做吗?
发布于 2016-01-13 12:16:21
您可以尝试以下表达式:
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)https://stackoverflow.com/questions/34766384
复制相似问题