匹配R中单元格中的两个部分字符串

时间:2016-03-16 06:36:07

标签: regex r subset

我读过其他文章,例如:

Selecting rows where a column has a string like 'hsa..' (partial string match)

How do I select variables in an R dataframe whose names contain a particular string?

Subset data to contain only columns whose names match a condition

但其中大部分都是简单修复:

  1. 他们只有一个匹配的字符串
  2. 他们只有一个匹配的部分字符串
  3. 所以我在这里寻求帮助。

    假设我们有一个这样的示例数据表:

    sample = data.table('Feb FY2016', 50)
    sample = rbind(sample, list('Mar FY2017', 30))
    sample = rbind(sample, list('Feb FY2017', 40))
    sample = rbind(sample, list('Mar FY2016', 10))
    colnames(sample) = c('month', 'unit')
    

    如何对数据进行子集化,以便我的数据只包含“月”列满足以下要求的行:

    1. 有2016年
    2. 以'Mar'或'Feb'开头
    3. 谢谢!

1 个答案:

答案 0 :(得分:2)

由于grep返回匹配项的索引,因此它将返回与模式匹配的行,并可用于子集化。

sample[grep('^(Feb|Mar).*2016$', sample$month),]

#         month unit
# 1: Feb FY2016   50
# 2: Mar FY2016   10

正则表达式寻找

  • ^;
  • 的开头
  • 后跟FebMar (Feb|Mar);
  • 任何字符.重复0到多次*;
  • 2016确切地说;
  • 后跟字符串$的结尾。