2016-05-16 97 views
0

工作,我有以下變量:ifelse不是R中

a    
welcome  
put to 
look at 
sorted for 

我要搜索字符串:

if have string "come" then b="home" 
if have string "to" then b="where" 
if have string "sorted" then b="done" 
if have string "look" then b="great" 

輸出

a    b 
welcome  home  
put to   where 
look at  great 
sorted for  done 

我嘗試下面的代碼。

let$b <- ifelse(grepl("come", let$a), "home", 
     ifelse(grepl("to", let$a), "where", 
     ifelse(grepl("sorted", let$a), "done", 
     ifelse(grepl("look", let$a), "great",""))) 

上面的代碼無法正常工作。

回答

1

我假設列'a'爲factor類。如果是這樣的情況下,列轉換爲character類,然後應用代碼

let$a <- as.character(let$a) 
let$b <- ifelse(grepl("come", let$a), "home", 
     ifelse(grepl("to", let$a), "where", 
     ifelse(grepl("sorted", let$a), "done", 
     ifelse(grepl("look", let$a), "great","")))) 
let$b 
#[1] "home" "where" "great" "done" 

而且,我們能夠避免嵌套ifelse通過創建模式vector(「拍」)和替換(「REPL」),通過'pat'循環,獲得'a'列中匹配模式的數字索引與grep並使用它獲得相應的'repl'。

pat <- c("come", "to", "sorted", "look") 
repl <- c("home", "where", "done", "great") 
let$b <- repl[sapply(pat, grep, let$a)] 
let$b 
#[1] "home" "where" "great" "done" 
+1

ifintse有錯字需要多一個')' – Batanichek

+0

如果我們在搜索類別中有/如何處理 – 12345

+0

@ 12345請問您可以舉一些例子 – akrun

0

我在這裏發佈這個希望它有幫助。 ifelse聲明失效的另一種可能性,導致我找到這個頁面,是一個尾隨的空白。

這很明顯,但在數據框中查看變量時甚至會突出顯示佔據單元格空間的內容,RStudio(我正在使用版本1.0.153)不顯示尾部空格。

使用粘貼(df $ var)會顯示空格。此外,您可以在讀取數據時使用strip.white = TRUE,或者修改df $ var < - trim(df $ var)。