我有一个包含值
和类型
的数据框。我想将 df 过滤为:
- 仅包含包含向量中所有值的
类型
- 仅按
类型
保留特定值。
我可以通过两步过滤来完成此任务,但似乎很容易出错。也许是因为 filter(keep.val %in% vals)
和 filter(vals %in% keep.val)
的顺序正好相反,但创建了不同的输出?
这是我的虚拟数据:
keep.val = c(1,3)
d <- data.frame(type = rep(c("a", "b", "d"), each = 4),
vals = as.integer(c(1:4, 3:6, 1,3,4,5)))
我的双重过滤:
d %>%
group_by(type) %>%
filter(all(keep.val %in% vals)) %>% # need to get two filters: one to keep only group that have all values
filter(vals %in% keep.val) # second to keep only specific values
我想要的输出(现在双重过滤是正确的):
type vals
<fct> <int>
1 a 1
2 a 3
3 d 1
4 d 3
我想知道是否有一种方法可以使过滤
一次,并澄清我在哪里过滤什么?主要是为了将来我回顾代码:)
最佳答案
您可以组合两个过滤器
:
library(dplyr)
d %>%
group_by(type) %>%
filter(all(keep.val %in% vals) & vals %in% keep.val)
#filter(all(keep.val %in% vals), vals %in% keep.val)
# type vals
# <fct> <int>
#1 a 1
#2 a 3
#3 d 1
#4 d 3
关于R:按组和值向量过滤的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61060750/