【问题标题】:Remove specific rows in R删除 R 中的特定行
【发布时间】:2019-05-11 23:54:49
【问题描述】:

我有一个要删除特定行的数据框。 我想删除有“Référence”字样的行和“référence”行下的 3 行。 请在此处查看我的example

我想我必须使用 grepl 函数。

感谢您的帮助。

最大。

【问题讨论】:

    标签: r regex grepl remove-if


    【解决方案1】:

    您应该使用grep,而不是grepl。当您使用 grep 时,您会得到与模式匹配的行索引,而使用 grepl 时,您会得到一个布尔向量。你可以这样做:

    rowIndexes = grep(x = df$col1, pattern = "refer")
    
    df = df[-c(rowIndexes, rowIndexes+1, rowIndexes+2),]
    

    例子:

    > df
              a   b  c   d  e
    1     00100  44  5  69 fr
    2     refer  34 35   7 df
    3  thisalso  46 15 167 as
    4   thistoo  46 15 167 as
    5     00100  11  5  67 uu
    6     00100 563 25  23 tt
    7     00100  44  5  69 fr
    8     refer  34 35   7 df
    9  thisalso  46 15 167 as
    10  thistoo  11  5  67 uu
    11    00100 563 25  23 tt
    12    00100  44  5  69 fr
    13    refer  34 35   7 df
    14 thisalso  46 15 167 as
    15  thistoo  11  5  67 uu
    16    00100 563 25  23 tt
    17    00100 563 25  23 tt
    18    00100 563 25  23 tt
    
    > rowIndexes = grep(x = df$col1, pattern = "refer")
    > df = df[-c(rowIndexes, rowIndexes+1, rowIndexes+2),]
    
    > df
    
           a   b  c  d  e
    1  00100  44  5 69 fr
    5  00100  11  5 67 uu
    6  00100 563 25 23 tt
    7  00100  44  5 69 fr
    11 00100 563 25 23 tt
    12 00100  44  5 69 fr
    16 00100 563 25 23 tt
    17 00100 563 25 23 tt
    18 00100 563 25 23 tt
    

    概括

    如果您想在 o 之后删除一组特定行之前的 N 行,请执行以下操作:

    rowIndexes = grep(x = df$col1, pattern = "refer")
    N = 2
    indexesToRemove = sapply(rowIndexes, function(x){ x + (0:N) })
    df = df[-indexesToRemove, ]
    

    其中N 是一个整数。如果 N 是正数,它将删除带有“refer”的行之后的 N 行。如果 N 为负数,这将删除 N 之前的行。

    【讨论】:

    • 非常感谢,这正是我想要的!同样,我如何使用这个函数说“删除所有行直到这个词,或者从这个词”?谢谢。
    【解决方案2】:

    从示例中,您似乎想删除带有 NA 的行。使用na.omit 很容易做到这一点:

    df <- data.frame(
      x = c(NA, 1, 2, 3, 4),
      y = c(10, NA, 18, 22, NA)
    )
    df
       x  y
    1 NA 10
    2  1 NA
    3  2 18
    4  3 22
    5  4 NA
    

    现在省略所有缺失值的行:

    df2 <- na.omit(df)
    df2
      x  y
    3 2 18
    4 3 22
    

    但请注意,na.omit 不仅会删除具有 NA 的单元格,还会删除整行!

    【讨论】:

      【解决方案3】:

      您可以像这样子集数据以删除带有单词Référence的所有行:

      数据

      显然,将 data 替换为您使用的数据框的名称。

      【讨论】:

      • 谢谢。是的,我想删除带有“reference”一词的行,以及下面的 3 行。可能吗?谢谢。
      猜你喜欢
      • 1970-01-01
      • 2022-01-23
      • 2014-06-25
      • 1970-01-01
      • 2021-11-09
      • 2015-01-19
      • 2019-06-05
      • 1970-01-01
      • 2013-01-21
      相关资源
      最近更新 更多