ifelse不在R工作

时间:2016-05-16 06:37:59

标签: r if-statement

我有以下变量:

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

上面的代码无法正常工作。

2 个答案:

答案 0 :(得分: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模式('pat')和替换('repl')来避免嵌套vector,循环遍历'pat',获取匹配的数字索引带有grep的'a'列中的模式,并使用它来获取相应的'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 :(得分:0)

我在这里发帖,希望它有所帮助。 ifelse语句无效的另一种可能性,导致我找到这个页面,是一个尾随空白。

这很明显,但请注意在数据框中查看变量时,即使突出显示它以查看占用单元格空间的内容,RStudio(我使用的是版本1.0.153)也不会显示尾随空格。

使用paste(df $ var)会显示空格。此外,您可以在读取数据时使用strip.white = TRUE或使用df $ var&lt; - trim(df $ var)来修剪它。