我有以下变量:
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","")))
上面的代码无法正常工作。
答案 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)来修剪它。