2016-01-13 57 views
1

的ifelse语句我有以下数据框:基于grepl

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 

如何我能得到这个工作的任何thougts?

回答

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)) 

,或者,如果你想要做的codegolfing(但不太好的初步实践):

+grepl("weg|laan", df_weg) 
+6

我们不能让'as.integer(grepl( “WEG | Laan的”,df_weg))'?或者'+'一元操作符为了搞砸康拉德? –

+3

@大卫很高兴认为我亲自采取。但我真的只是抱怨糟糕的代码。 –

+4

@KonradRudolph即时响应你的椅子几乎落下。男人,你真棒。 –