返回两个不同条件的连续行

时间:2019-04-02 23:22:14

标签: r

所以我有一个数据,我想选择连续的行,其中第一行需要匹配条件1,第二行需要匹配其他条件。

假设我有一个矩阵A,我想选择第1列为0且第2列在(24,25)中的行,第一列的连续行需要为1。因此,在下面的数据中,仅将行(2,3)和行(5,6)一起选择。第4行满足条件1,但没有后续的行,因此已放弃。

A <- structure(c(0, 0, 1, 0, 0, 1, 22, 24, 1, 24, 25, 3), .Dim = c(6L,2L)) 

我希望输出

 B <- structure(c(0, 1, 0, 1, 24, 1, 25, 3), .Dim = c(4L, 2L)) 

我还没有找到解决问题的好方法,希望任何人都可以提供一些建议。非常感谢

2 个答案:

答案 0 :(得分:3)

我们首先可以找到第1列为0且第2列位于c(24, 25)中的索引,找出第1列为1的下一行,并过滤这些行。

inds <- which(A[, 1] == 0 & A[, 2] %in% c(24, 25))
inds1 <- A[inds + 1, 1] == 1

A[sort(c(inds[inds1], (inds + 1)[inds1])), ]

#     [,1] [,2]
#[1,]    0   24
#[2,]    1    1
#[3,]    0   25
#[4,]    1    3

使用dplyrleadslice的方法

library(dplyr)

data.frame(A) %>%
      slice({
         inds = which(X1 == 0 & X2 %in% c(24, 25) & lead(X1) == 1)
         sort(c(inds, inds + 1))
        })

#  X1 X2
#1  0 24
#2  1  1
#3  0 25
#4  1  3

答案 1 :(得分:3)

尝试一下:

ind <- A[,1] == 0 & A[,2] %in% c(24, 25) & c(A[-1,1] == 1, FALSE)
ind
# [1] FALSE  TRUE FALSE FALSE  TRUE FALSE
A[ind,]
#      [,1] [,2]
# [1,]    0   24
# [2,]    0   25
A[ind | c(FALSE, ind[-nrow(A)]), ]
#      [,1] [,2]
# [1,]    0   24
# [2,]    1    1
# [3,]    0   25
# [4,]    1    3

或者,

A[sort(c(which(ind), which(ind) + 1)),]
#      [,1] [,2]
# [1,]    0   24
# [2,]    1    1
# [3,]    0   25
# [4,]    1    3