2016-05-16 134 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)。