所以我有一个数据,我想选择连续的行,其中第一行需要匹配条件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))
我还没有找到解决问题的好方法,希望任何人都可以提供一些建议。非常感谢
答案 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
使用dplyr
,lead
和slice
的方法
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