【问题标题】:How to subset a vector, based on the condition "contains" a character?如何根据“包含”字符的条件对向量进行子集化?
【发布时间】:2014-06-27 08:35:31
【问题描述】:

如果我有一个向量:

Months = month.abb[1:12]

我想提取所有以字母 J 开头的月份(在本例中为 Jan、Jun 和 Jul)。

  1. 是否有通配符,如 Excel 中的 *,它列出了您搜索 J* 的向量的所有元素?

  2. 如何提取以字母“M”或“A”开头的元素。预期的输出是 Mar,May,Apr,Aug?

【问题讨论】:

    标签: r extract wildcard subset contains


    【解决方案1】:

    试试:

     grep("^J", Months,value=TRUE)
     #[1] "Jan" "Jun" "Jul"
    
    grep("^A|^M", Months,value=TRUE)
    #[1] "Mar" "Apr" "May" "Aug"
    

    【讨论】:

    • 完美。工作绝对完美。干杯队友!
    【解决方案2】:

    您会发现glob2rx 函数有助于将通配符构造转换为正则表达式:

    > glob2rx("J*")
    [1] "^J"
    > grep(glob2rx("J*"), Months, value=TRUE)
    [1] "Jan" "Jun" "Jul"
    

    【讨论】:

    • 感谢您让我们关注 glob2rx。 base R 中是否还有其他工具可以帮助人们正确创建正则表达式?
    • @user2583119 没有其他我知道的类似功能。
    【解决方案3】:

    如果你碰巧加载了stringr,你可以这样做:

    library(stringr)
    
    str_subset(Months, "^J")
    [1] "Jan" "Jun" "Jul"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 2017-12-13
      • 2012-12-30
      • 2020-04-15
      • 2015-11-08
      • 1970-01-01
      • 2014-07-30
      相关资源
      最近更新 更多