【问题标题】:how do I grep in R?我如何在 R 中 grep?
【发布时间】:2011-05-12 08:40:26
【问题描述】:

我想根据名称的子集选择行,例如

如果我有以下数据:

data <- structure(c(91, 92, 108, 104, 87, 91, 91, 97, 81, 98), 
.Names = c("fee-", "fi", "fo-", "fum-", "foo-", "foo1234-", "123foo-", 
"fum-", "fum-", "fum-"))

如何选择匹配 'foo' 的行?

使用 grep() 不起作用:

 grep('foo', data)

返回:

integer(0)

我做错了什么?或者,有没有更好的方法?

谢谢!

【问题讨论】:

    标签: r subset


    【解决方案1】:

    你需要grep数据的names属性,而不是values属性。

    对于您的示例,请使用

    > grep("foo",names(data))
    [1] 5 6 7
    > data[grep("foo",names(data))]
      foo- foo1234-  123foo- 
      87       91       91 
    

    另一种干净的方法是使用数据框。

    > data <- data.frame(values=c(91, 92, 108, 104, 87, 91, 91, 97, 81, 98), 
                       names = c("fee-", "fi", "fo-", "fum-", "foo-", "foo1234-", "123foo-", 
                       "fum-", "fum-", "fum-"))
    
    > data$values[grep("foo",data$names)]
    [1] 87 91 91
    

    【讨论】:

      【解决方案2】:

      将子集与正则表达式结合使用:

      subset(your_data, regexpr("foo", your_data$your_column_to_match) > 0))
      

      如果你只关心一列的数据集,我猜你不需要指定列名...

      菲利普

      【讨论】:

      • 我通常发现 grepl 在这里更有用——你可以跳过比较 vs 0 的事情,这会使代码看起来更简洁。
      【解决方案3】:
      > grep("foo",names(data), value=T)
      [1] "foo-"     "foo1234-" "123foo-" 
      

      如果值为真,则返回内容而不是索引

      【讨论】:

        猜你喜欢
        • 2016-06-29
        • 1970-01-01
        • 2014-11-16
        • 2015-04-07
        • 1970-01-01
        • 2011-09-27
        • 2011-05-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多