我有一个类似于以下结构的数据帧:
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)
ID第1列 | 第2列 | |
---|---|---|
A | 1 | 0 |
A | 0 | <1>|
B | 1 | 0 |
B | 0 | 0|
C | 1 | 0 |
C | 0 | 0 |
D | 1 | 0 |
D | 0 | 1 |
使用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(