R:按组和值向量过滤的更好方法?

标签 r dplyr

我有一个包含类型的数据框。我想将 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/

相关文章:

r - 计算 R 数据帧中的增长百分比

excel - 将矩阵导出到 Excel

r - 如何根据同一向量的值重复向量的索引?

R函数根据重复时间组合行

r - lubridate - 选择每周的第一个非星期一。

r - 使用 '-' 选择 (dplyr) 运算符

r - 为 r 中的每个变量按组汇总表中的数据

r - 向 ggplot 添加自定义颜色

R:列表 2 中有多少列表 1 的元素/出现次数

r - 用于分析调查中不同排名问题的响应之间关系的代码