【问题标题】:Using grep to search along row in R使用 grep 在 R 中沿行搜索
【发布时间】:2015-02-10 12:49:09
【问题描述】:

我正在尝试使用 grep 函数在 R 中沿数据框的一行进行搜索,但是它一直返回“character(0)”,关于使用 grep 沿行搜索有什么我不知道的吗?

我可以看到我正在搜索的内容在该行中,但 grep 没有找到它。

已尝试提供 fixed=FALSE 和 ignore.case=TRUE

命令:

grep("string",df[1,]) 

我可以轻松使用

which(df[1,]=="string") 

但是为什么 grep 找不到字符串呢?

【问题讨论】:

    标签: r


    【解决方案1】:

    因为grep 适用于向量而不是data.frame

    数据

    #> df=data.frame(col1=c("cat123","doggy"),col2=c("mydog","cat"),col3=1:2)
    #> df
    #    col1  col2 col3
    #1 cat123 mydog    1
    #2  doggy   cat    2
    
    > is.data.frame(df[1,])
    [1] TRUE
    

    如果您使用apply 循环遍历data.frame 的行,您将循环向量并执行以下操作:

    > t(apply(df,1,function(u) grepl("dog",u)))
          [,1]  [,2]  [,3]
    [1,] FALSE  TRUE FALSE
    [2,]  TRUE FALSE FALSE
    

    【讨论】:

    • 你也可以转换成矩阵'dim<-'(grepl('dog', as.matrix(df)), dim(df))
    • 总是最好的解决方案 :) 但是你能参考一些清楚地解释'dim
    • 这是一种不同的分配方式,而不是分两步编写。 IE。 m1 <- grepl('dog', as.matrix(df)); dim(m1) <- dim(df)。我暂时没有链接。
    • 我了解全局概念但不完全理解,我猜它适用于其他功能。
    【解决方案2】:

    如果你看一下grep的代码,你会在第一行看到原因

     if (!is.character(x)) 
        x <- structure(as.character(x), names = names(x))
    

    在数据帧上尝试一下,看看会发生什么

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多