我有一个数据框,其中的一个变量的另一个变量的值不同。 像这样: DataFrame
因此,当S的值包含B的所有可能值时,我需要一个子集。在此示例中,el子集由S = a和S = b符合:
有什么主意吗?谢谢!
答案 0 :(得分:-1)
一种选择是将'B'filter
'B'列中具有all
unique
个值的行按'S'和%in%
分组>
library(dplyr)
un1 <- unique(df1$B)
df1 %>%
group_by(S) %>%
filter(all(un1 %in% B))
# A tibble: 8 x 2
# Groups: S [2]
# S B
# <fct> <dbl>
#1 a 1
#2 a 2
#3 a 3
#4 a 4
#5 d 1
#6 d 2
#7 d 3
#8 d 4
或与data.table
library(data.table)
setDT(df1)[, .SD[all(un1 %in% B)], S]
或使用base R
df1[with(df1, ave(B, S, FUN = function(x) all(un1 %in% x)) == 1),]
df1 <- data.frame(S = rep(letters[1:4], c(4, 3, 2, 4)),
B = c(1:4, c(1, 3, 4), 1:2, 1:4))