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

matching two partial strings in a cell in R

我读过其他文章,例如:

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. 他们只有一个部分字符串可以匹配

所以我在这里寻求帮助。

假设我们有这样的示例数据 table:

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')

我如何对数据进行子集化,以便我的数据仅包含 "month" 列满足以下要求的行:

  1. 有 2016 年
  2. 从 'Mar' 或 'Feb'
  3. 开始

谢谢!

由于 grep returns 它匹配的项目的索引,它将 return 与模式匹配的行,并可用于子集化。

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

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

正则表达式查找

  • 行首 ^;
  • 后跟 FebMar(Feb|Mar)
  • 任何字符 . 重复 0 到多次 *;
  • 2016 正好;
  • 后跟字符串结尾$.