根据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]]