r - 仅在两个级别都存在时过滤组
问题描述
这感觉应该更简单,我只是错过了一些东西。目标是将数据过滤到一个新的 df 中,其中 var 值 1 和 2 都在组中表示
这是一些玩具数据:
grp <- c(rep("A", 3), rep("B", 2), rep("C", 2), rep("D", 1), rep("E",2))
var <- c(1,1,2,1,1,2,1,2,2,2)
id <- c(1:10)
df <- as.data.frame(cbind(id, grp, var))
只有 grp A 和 C 应该出现在新数据中,因为它们是唯一存在 var 1 和 2 的数据。
我试过 dplyr,但显然 '&' 不起作用,因为它不是基于行的,而且 '|' 只返回相同的df:
df.new <- df %>% group_by(grp) %>% filter(var==1 & var==2) #returns no rows
解决方案
这是另一种dplyr
方法。这可以适用于 中的两个以上因子水平var
。
library(dplyr)
df2 <- df %>%
group_by(grp) %>%
filter(all(levels(var) %in% var)) %>%
ungroup()
df2
# # A tibble: 5 x 3
# id grp var
# <fct> <fct> <fct>
# 1 1 A 1
# 2 2 A 1
# 3 3 A 2
# 4 6 C 2
# 5 7 C 1
推荐阅读
- c++ - C++ Sfml,如何为我的 Sprite 创建一个碰撞框
- javascript - 我怎样才能得到数组的最后一项?
- gitlab-ci - 基于python脚本返回码的gitlab ci中的if/else逻辑
- arrays - 合并两个数组对象
- php - 即使在修剪后,CSV 联盟也会在字符串的开头显示一些空格
- azure - 将自定义子域映射到 Azure 存储容器
- javascript - 通过JS从站点获取数据并保存在字典中
- java - 基于 Keycloak 注解的资源配置
- node.js - 如何获取错误字符串 (MODULE_NOT_FOUND) 的一部分?
- javascript - ReferenceError:未定义 gtag