有没有办法在ifelse语句中实现这些条件?
df <-data.frame(Name = c("Tom","Mary","Tim","Chris") )
ifelse(name starting with T, "YES", "NO")
ifelse(name include i, "YES", "NO")
ifelse(name ends with s, "YES", "NO")
答案 0 :(得分:0)
您可以使用grepl()
(请参阅help(grepl)
和help(regex)
):
ifelse(grepl('^T', df$Name), 'YES', 'NO')
ifelse(grepl('i', df$Name), 'YES', 'NO')
ifelse(grepl('s$', df$Name), 'YES', 'NO')
导致以下输出(易于检查):
> ifelse(grepl('^T', df$Name), 'YES', 'NO')
[1] "YES" "NO" "YES" "NO"
> ifelse(grepl('i', df$Name), 'YES', 'NO')
[1] "NO" "NO" "YES" "YES"
> ifelse(grepl('s$', df$Name), 'YES', 'NO')
[1] "NO" "NO" "NO" "YES"
grepl()
返回一个与作为函数第二个参数的向量长度相同的逻辑向量,返回TRUE
,其中函数的第一个参数的正则表达式存在,而FALSE
表示元素在哪里找不到表达式。
在正则表达式中,特别是在R中,^
匹配第一个字符,$
匹配最后一个字符。因此,^T
是一个正则表达式,用于查找以T开头的字符串,而s$
是一个正则表达式,用于查找以s结尾的字符串。