我有这个数据。
group name
1 A
1 A
1 A
1 B
1 C
2 A
2 B
3 A
3 B
3 C
3 D
我想用标准过滤组。例如,我想过滤{A,B,C}中的组。
因为{A,B,C}(组1的唯一组合)在{A,B,C}中,所以将过滤组1。
第2组将被过滤,因为{A,B}在{A,B,C}中
但是,第3组将不会被过滤,因为{A,B,C,D}不是{A,B,C}的子集。
我应该如何处理这个问题?另外,我还有更多标准(即{A,B,C}和{A,C} ...)。
structure(list(group = c(1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3),
name = c("A", "A", "A", "B", "C", "A", "B", "A", "B", "C", "D")),
row.names= c(NA, -11L), class = c("tbl_df", "tbl", "data.frame"))
我们可以指定标准向量并执行 group_by
filter
stdvec <- c("A", "B", "C")
library(dplyr)
df1 %>%
group_by(group) %>%
filter(all(unique(name) %in% stdvec))
及其反面
df1 %>%
group_by(group) %>%
filter(!all(unique(name) %in% stdvec))
如果向量更多,可能是
stdvec1 <- c("A", "B", "C")
stdvec2 <- c("A", "C")
df1 %>%
group_by(group) %>%
filter(all(stdvec2 %in% name) & all(stdvec1 %in% name))
及其反面
df1 %>%
group_by(group) %>%
filter(!(all(stdvec2 %in% name) & all(stdvec1 %in% name)))
或者它可以是union
与unique
“ name”的值相比的多个向量中的一个,并检查是否all
包含(和取反!
)
df1 %>%
group_by(group) %>%
filter(!all(unique(name) %in% union(stdvec1, stdvec2)))
和
df1 %>%
group_by(group) %>%
filter(all(unique(name) %in% union(stdvec1, stdvec2)))
如果有很多vectors
,使用reduce
来union
library(purrr)
nm1 <- mget(ls(pattern = "^stdvec\\d+$")) %>%
reduce(union)
df1 %>%
group_by(group) %>%
filter(all(unique(name) %in% nm1))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句