首页 > 解决方案 > 获取未采样的 id

问题描述

我想获取未采样的 id

id <- rep(1:10,each=2)
trt <- rep(c("A","B"),2)
score <- rnorm(20,0,1)

df <- data.frame(id,trt,score)
df$id <- as.factor(df$id)
df
id trt      score
1   1   A  0.4920104
2   1   B  0.5030771
3   2   A  1.4030437
4   2   B  0.4132130
5   3   A -2.4449382
6   3   B -1.0981531
7   4   A -0.6013329
8   4   B -0.8411616
9   5   A -0.2696329
10  5   B -0.9869931
11  6   A  1.0681588
12  6   B  1.7500570
13  7   A  0.6008876
14  7   B -0.2181209
15  8   A -1.2943954
16  8   B -2.4495156
17  9   A  0.7680115
18  9   B  0.5497457
19 10   A -1.9713569
20 10   B -0.7696987

df <- df %>% filter(id %in% sample(levels(id),5))
df
   id trt      score
1   3   A  1.8816245
2   3   B  0.8614810
3   5   A  0.5508704
4   5   B -1.4144959
5   7   A  0.5174229
6   7   B  0.5244466
7   9   A  0.4318934
8   9   B -1.6376436
9  10   A  0.1746228
10 10   B  1.6319294

在这里,我想获取其他 ID。我该如何为此编码?假设有很多 id 并且无法手动选择它们

   id trt       score
1   1   A  0.07040075
2   1   B -0.70388700
3   2   A  0.78421333
4   2   B -0.90052385
7   4   A -0.48052247
8   4   B -0.66198818
11  6   A  1.12168455
12  6   B  0.90454813
15  8   A  1.54550328
16  8   B  0.64822307

..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... …………

标签: r

解决方案


如果我们将filtered 对象分配给一个新对象('df1')而不是分配原始对象名称,则一个选项是anti_join

library(dplyr)
anti_join(df, df1, by = 'id')

或者另一种选择是filter

df %>%
  filter(! id %in% df1$id)

数据

df1 <- df %>%
          filter(id %in% sample(levels(id),5))

推荐阅读