根据R中另一列的值范围,按列值选择行

根据R中另一列的值范围,按列值选择行,r,dataframe,R,Dataframe,我有一个与此类似的数据帧: x <- data.frame("A" = c(11:24), "B" = c(25,25,25,25,25,37,37,16,16,16,16,16,42,42), "C" = c(1:3,1:2,1:2,1:3,1:2,1:2)) 我只想保留B中每个值至少有一个C中所有值(1-3)的行。因此,我的结果如下所示: A B C 11 25 1 12 25 2 13 25 3 14 25 1

我有一个与此类似的数据帧:

x <- data.frame("A" = c(11:24), 
                "B" = c(25,25,25,25,25,37,37,16,16,16,16,16,42,42), 
                "C" = c(1:3,1:2,1:2,1:3,1:2,1:2))
我只想保留B中每个值至少有一个C中所有值(1-3)的行。因此,我的结果如下所示:

 A  B C
11 25 1
12 25 2
13 25 3
14 25 1
15 25 2
18 16 1
19 16 2
20 16 3
21 16 1
22 16 2

在搜索答案时,我似乎找不到正确的关键字

按“B”分组后,我们可以使用
all

library(dplyr)
x %>%
    group_by(B) %>%
    filter(all(1:3 %in% C))
# A tibble: 10 x 3
# Groups:   B [2]
#       A     B     C
#   <int> <dbl> <int>
# 1    11    25     1
# 2    12    25     2
# 3    13    25     3
# 4    14    25     1
# 5    15    25     2
# 6    18    16     1
# 7    19    16     2
# 8    20    16     3
# 9    21    16     1
#10    22    16     2
库(dplyr)
x%>%
组别(B)%>%
过滤器(全部(1:3%在%C中))
#一个tibble:10x3
#组别:B[2]
#A、B、C
#     
# 1    11    25     1
# 2    12    25     2
# 3    13    25     3
# 4    14    25     1
# 5    15    25     2
# 6    18    16     1
# 7    19    16     2
# 8    20    16     3
# 9    21    16     1
#10    22    16     2

另一个选项是使用
data.table
计算每个B的唯一C,然后过滤数据,使其仅包含具有3个不同C的B

library(data.table)
setDT(x)

x[B %in% x[,length(unique(C)),by=B][V1==3,B]]
library(data.table)
setDT(x)

x[B %in% x[,length(unique(C)),by=B][V1==3,B]]