【问题标题】:matching two partial strings in a cell in R匹配R中单元格中的两个部分字符串
【发布时间】:2016-07-01 21:37:34
【问题描述】:

我读过其他文章,例如:

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

所以我在这里寻求帮助。

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

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. 从“三月”或“二月”开始

谢谢!

【问题讨论】:

    标签: regex r subset


    【解决方案1】:

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

    sample[grep('^(Feb|Mar).*2016$', sample$month),]
    
    #         month unit
    # 1: Feb FY2016   50
    # 2: Mar FY2016   10
    

    正则表达式查找

    • 行首^;
    • 后跟Feb 或Mar 和(Feb|Mar);
    • 任何字符.重复0到多次*;
    • 2016 完全正确;
    • 后跟字符串$的结尾。

    【讨论】:

    • 非常感谢!有用!但是有一个问题,为什么我不能使用 grepl()?我用相同的输入尝试了 grepl(),结果只包含“Feb”。
    • grepl 对我来说完全一样。唯一的区别是grep 返回匹配索引的向量(除非value = TRUE),grepl 为匹配返回TRUE,FALSE 为其他所有内容;要么适用于子集。
    • 嗯出于某种原因,当我使用 grepl 时,我只会保留 feb 值......但无论如何。非常感谢您的帮助! :)
    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    相关资源
    最近更新 更多