根据 R 中的 ID 列过滤行

Filter rows based on a ID column in R

我有一个包含 ID 列、时间点和状态的数据框。每个 ID 都有多个时间点和与每个时间点关联的状态。我想过滤所有与 ID 关联的所有时间点具有相同状态的 ID。我怎样才能用 R dpylr 实现它?

下面是一个示例数据集

ID Time Status
A 1 X
A 2 X
A 3 Y
A 4 Z
B 1 X
B 2 X
B 3 X
C 1 Z
C 2 Z
D 1 X
E 1 X
E 2 Y

预期数据帧

ID Time Status
B 1 X
B 2 X
B 3 X
C 1 Z
C 2 Z
D 1 X

这个有用吗:

library(dplyr)
df %>% group_by(ID) %>% filter(length(unique(Status)) == 1)
# A tibble: 6 x 3
# Groups:   ID [3]
  ID     Time Status
  <chr> <dbl> <chr> 
1 B         1 X     
2 B         2 X     
3 B         3 X     
4 C         1 Z     
5 C         2 Z     
6 D         1 X   

我们可以使用

library(data.table)
setDT(df)[, .SD[uniqueN(Status)==1], ID]