2016-01-13 48 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即時響應你的椅子幾乎落下。男人,你真棒。 –