【问题标题】:ifelse starting with, ends with, includes [duplicate]ifelse 开头,结尾,包括 [重复]
【发布时间】:2017-10-31 00:56:37
【问题描述】:

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

【问题讨论】:

标签: r


【解决方案1】:

你可以使用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 结尾的字符串的正则表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-28
    • 2012-10-27
    • 2021-02-08
    • 1970-01-01
    • 2015-02-03
    • 2012-08-11
    • 1970-01-01
    • 2018-08-01
    相关资源
    最近更新 更多