r - 在 dplyr group_by 中过滤,以便保留符合某些条件的行组合
问题描述
我有一个与此结构匹配的数据表:
address,zip_code,date,mailout
2 Lafayette St,90210,06/12/10,FALSE
2 Lafayette St,90210,04/01/12,FALSE
Higgens Square,62561,02/12/10,FALSE
Higgens Square,62561,28/03/13,TRUE
55 The Wren,91234,23/08/18,TRUE
55 The Wren,91234,19/09/13,FALSE
9A Sylvan Road,54332,16/11/10,TRUE
9A Sylvan Road,54332,31/01/17,FALSE
我正在尝试使用 dplyr来查找给定地址/邮政编码分组至少有一个和至少一个mailout 的group_by
情况。我正在寻找的结果是这样的:TRUE
FALSE
address,zip_code,date,mailout
Higgens Square,62561,02/12/10,FALSE
Higgens Square,62561,28/03/13,TRUE
55 The Wren,91234,23/08/18,TRUE
55 The Wren,91234,19/09/13,FALSE
9A Sylvan Road,54332,16/11/10,TRUE
9A Sylvan Road,54332,31/01/17,FALSE
当我尝试
df %>% group_by(address, zip_code) %>% filter(mailout == TRUE | mailout == FALSE)
我得到所有行返回。
当我尝试
df %>% group_by(address, zip_code) %>% filter(mailout == TRUE & mailout == FALSE)
我没有得到任何结果。
解决方案
使用any
:
library(dplyr)
df %>% group_by(address, zip_code) %>% filter(any(mailout) && any(!mailout))
# address zip_code date mailout
# <chr> <int> <chr> <lgl>
#1 Higgens Square 62561 02/12/10 FALSE
#2 Higgens Square 62561 28/03/13 TRUE
#3 55 The Wren 91234 23/08/18 TRUE
#4 55 The Wren 91234 19/09/13 FALSE
#5 9A Sylvan Road 54332 16/11/10 TRUE
#6 9A Sylvan Road 54332 31/01/17 FALSE
或者all
让每个组只获得一个值,您可以使用该值来决定是否保留该组。
df %>% group_by(address, zip_code) %>% filter(all(c(TRUE, FALSE) %in% mailout))
推荐阅读
- android - 线程循环崩溃
- ios - 从应用程序控制网络链接调节器
- html - 我有 3 个 CSS 按钮,但另一个有
- debugging - MSVC 显示“没有可用的反汇编”。对于任何从 MSVC 编译出来的东西
- javascript - 如何停止在 hubspot 上提交表单?
- yocto - Yocto do_install(): 安装实用手册
- vba - VBA Word 输入嵌套单元格
- java - 响应消息:javax.mail.MessageRemovedException:无法在 POP3Message.getContentStream 中检索消息 #1
- php - 注册与帖子相关的分类
- python - 为什么当我想在输入 1 时显示所有文件时它什么也不打印