我有一个具有一些 ID 和相关时间点的数据集。我想过滤掉具有特定时间点组合的 ID。如果我使用 %in% 或 | 进行过滤,我会从特定组合中获取 ID。我如何在 R 中做到这一点?
ID | 时间点 |
---|---|
1 | 1 |
1 | 6 |
1 | 12 |
2 | 1 |
3 | 1 |
3 | 6 |
3 | 12 |
3 | 18 |
4 | 1 |
4 | 6 |
4 | 12 |
我想过滤具有时间点 1,6 和 12 的 ID 并排除其他 ID。
结果将是 ID 1,3 和 4
我有一个具有一些 ID 和相关时间点的数据集。我想过滤掉具有特定时间点组合的 ID。如果我使用 %in% 或 | 进行过滤,我会从特定组合中获取 ID。我如何在 R 中做到这一点?
ID | 时间点 |
---|---|
1 | 1 |
1 | 6 |
1 | 12 |
2 | 1 |
3 | 1 |
3 | 6 |
3 | 12 |
3 | 18 |
4 | 1 |
4 | 6 |
4 | 12 |
我想过滤具有时间点 1,6 和 12 的 ID 并排除其他 ID。
结果将是 ID 1,3 和 4
library(dplyr)
df <- data.frame(ID = c(1, 1, 1, 2, 3, 3, 3, 3, 4, 4, 4),
Timepoint = c(1, 6, 12, 1, 1, 6, 12, 18, 1, 6, 12))
df %>%
filter(Timepoint %in% c(1, 6, 12)) %>%
mutate(indicator = 1) %>%
group_by(ID) %>%
complete(Timepoint = c(1, 6, 12)) %>%
filter(!ID %in% pull(filter(., is.na(indicator)), ID)) %>%
select(indicator)
输出:
# A tibble: 9 × 2
# Groups: ID [3]
ID indicator
<dbl> <dbl>
1 1 1
2 1 1
3 1 1
4 3 1
5 3 1
6 3 1
7 4 1
8 4 1
9 4 1
我们可以用
library(dplyr)
df %>%
group_by(ID) %>%
filter(all(c(1, 6, 12) %in% Timepoint)) %>%
ungroup
-输出
# A tibble: 10 x 2
ID Timepoint
<dbl> <dbl>
1 1 1
2 1 6
3 1 12
4 3 1
5 3 6
6 3 12
7 3 18
8 4 1
9 4 6
10 4 12
根据您的数据,ID 2 的时间点为 1。因此,如果按时间点 1、6、12 过滤,结果将是 1、2、3、4,而不是 1、3、4。
ids <- c(1, 1, 1, 2, 3, 3, 3, 3, 4, 4, 4)
time_points <- c(1, 6, 12, 1, 1, 6, 12, 18, 1, 6, 12)
dat <- data.frame(ids, time_points)
unique(dat$ids[dat$time_points %in% c(1, 6, 12)])