根据 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]
我有一个包含 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]