r-当两列中满足两个条件时,保留查询中的所有组



我有一个类似于以下结构的数据帧:

df <- 
read.table(textConnection("ID   Column1   Column2
A 1 0
A 0 1
B 1 0
B 0 0 
C 1 0
D 1 0 
D 0 1"), header=TRUE)
<1>0
ID第1列第2列
A10
A0
B10
B0
C10
C00
D10
D01

使用dplyr

df %>% 
group_by(ID) %>% 
filter(sum(Column1)>=1 & sum(Column2)>=1)

发出

# A tibble: 4 × 3
# Groups:   ID [2]
ID    Column1 Column2
<chr>   <int>   <int>
1 A           1       0
2 A           0       1
3 D           1       0
4 D           0       1

我们也可以使用any:

df |>
group_by(ID) |> 
filter(any(Column1 == 1) & any(Column2 == 1)) |>
ungroup()

输出:

# A tibble: 4 × 3
ID    Column1 Column2
<chr>   <int>   <int>
1 A           1       0
2 A           0       1
3 D           1       0
4 D           0       1

原理相同,但使用data.table如下:

df <- 
read.table(textConnection("ID   Column1   Column2
A 1 0
A 0 1
B 1 0
B 0 0 
C 1 0
D 1 0 
D 0 1"), header=TRUE)
library(data.table)
setDT(df)[,.SD[any(Column1 == 1) & any(Column2 == 1)], by=ID]
#>    ID Column1 Column2
#> 1:  A       1       0
#> 2:  A       0       1
#> 3:  D       1       0
#> 4:  D       0       1

创建于2022-08-10由reprex包(v2.0.1(

最新更新