r—在两行两列中满足条件的情况下保留记录



我有一个类似的数据集:

df <- 
read.table(textConnection("ID   Column1   Column2
A 0 1
A 1 0
A 1 0
A 1 0
A 0 1
A 1 0
A 0 1
A 0 0 
A 1 0 
A 1 0
B 0 1
B 1 0 
C 0 1
C 0 0
C 1 0"), header=TRUE)

我想在dplyr中做一个group_by ID,它维护第2列="1"的记录,并且它下面的记录具有第1列="。每个ID可能发生不止一次这种情况;应排除所有其他记录。所以上面的输出应该是:

<1><1>
ID第1列第2列
A0
A10
A0
A10
B01
B10

您可以使用laglead:

library(dplyr)
df %>%
group_by(ID) %>%
filter(lead(Column1) == 1 &     Column2  == 1 |
Column1  == 1 & lag(Column2) == 1) %>%
ungroup()
# # A tibble: 6 × 3
#   ID    Column1 Column2
#   <chr>   <int>   <int>
# 1 A           0       1
# 2 A           1       0
# 3 A           0       1
# 4 A           1       0
# 5 B           0       1
# 6 B           1       0

这里有一种替代方法:

library(dplyr)
df %>% 
group_by(ID, x = rep(row_number(), each=2, length.out = n())) %>% 
filter(sum(Column1)>=1 & sum(Column2)>=1) %>% 
ungroup() %>% 
select(-x)
ID    Column1 Column2
<chr>   <int>   <int>
1 A           0       1
2 A           1       0
3 A           0       1
4 A           1       0
5 B           0       1
6 B           1       0

最新更新