【问题标题】:How to delete the following row of a conditional row in a R dataframe?如何删除 R 数据框中条件行的以下行?
【发布时间】:2018-07-13 06:44:07
【问题描述】:

我仍在学习如何不在 R 中使用 for 循环。 我不知道如何结合条件和迭代之类的过程...... 在大型数据框中,我需要消除 r = 0 的所有行,但我还需要消除该行后面的行。

例如,在 Df 数据框中,我需要删除第 4、5、8 和 9 行。

Df
    x r
1  12 1
2  15 1
3  36 1 
4   4 0 
5  89 1
6   6 1
7  52 1
8   3 0
9  67 1
10 85 1

【问题讨论】:

    标签: r dataframe filtering


    【解决方案1】:

    计算 0 行的索引,然后删除这些以及每个索引加 1。

    ix <- which(Df$r == 0)
    Df[-c(ix, ix + 1), ]
    

    给予:

        x r
    1  12 1
    2  15 1
    3  36 1
    6   6 1
    7  52 1
    10 85 1
    

    【讨论】:

      【解决方案2】:

      这是使用dplyr 包中的filterlag 函数的一种选择。

      library(dplyr)
      
      DF2 <- DF %>% filter(!(r == 0 | lag(r, default = 1) == 0))
      DF2
      #    x r
      # 1 12 1
      # 2 15 1
      # 3 36 1
      # 4  6 1
      # 5 52 1
      # 6 85 1
      

      【讨论】:

        【解决方案3】:
        r1 = Df$r != 0 
        r2 = c(TRUE, r1[1:(length(r1) - 1)])
        Df = Df[r1 & r2,]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-06-20
          • 1970-01-01
          • 2019-06-05
          • 2020-09-03
          • 1970-01-01
          • 2020-09-02
          • 2022-10-14
          相关资源
          最近更新 更多