ifelse开头,结尾,包括

时间:2017-10-31 00:56:38

标签: r

有没有办法在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")

1 个答案:

答案 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结尾的字符串。