我有以下数据框:
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
关于如何让它发挥作用有什么想法吗?
您可以尝试以下表达式:
x <- "weg|laan" # or paste(c("weg", "laan"), collapse="|")
df$test <- ifelse(grepl(x, df_weg), 1, 0)
|
in a regex
意思是“或”
作为一种更直接的方法,感谢@DavidArenburg,因为您需要 0/1 输出,所以您可以将逻辑结果转换为grepl
为整数:
as.integer(grepl("weg|laan", df_weg))
或者,如果您想做代码高尔夫(但不太好练习):
+grepl("weg|laan", df_weg)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)