r - 过滤不包含特定条件的变量
问题描述
> DF<-data.frame(id=c(1,1,2,3,3),code=c("A","B","E","NA","A"))
> DF
id code
1 1 A
2 1 B
3 2 E
4 3 NA
5 3 A
我想删除所有id
where code
is A
。使用下面我得到一个错误的结果。
> DF%>%group_by(id)%>%filter(!(code=="A"))
# A tibble: 3 x 2
# Groups: id [3]
id code
<dbl> <fct>
1 1 B
2 2 E
3 3 NA
但我想要的输出是:
id code
1 2 E
有任何想法吗?最佳 H
解决方案
您可以使用 :
library(dplyr)
DF %>% group_by(id) %>% filter(!any(code == 'A'))
# id code
# <dbl> <chr>
#1 2 E
基本 R 中的相同逻辑:
subset(DF, !ave(code == 'A', id, FUN = any))
和data.table
:
library(data.table)
setDT(DF)[, .SD[!any(code == 'A')], id]
推荐阅读
- regex - 如何让我的正则表达式匹配重叠而没有无限错误?
- java - 在 Maven 中央部署一个版本
- css - Css加载字体:url中的#是什么意思以及如何添加GET参数?
- javascript - 使用谷歌表格中的谷歌应用脚本从系统或 url 读取图像并将图像发布到 API
- swiftui - SwiftUI - ReferenceFileDocument - 无法指示需要保存的文档
- node.js - 应用引擎部署因“无法验证 Node.js 二进制文件”而停止
- mongodb - Mongo Shell:按名称过滤 getCollectionNames()
- c# - 如何使用 Stacks 处理递归函数中的无限 for 循环?
- java - 使recyclerview和cardview中的按钮可点击
- javascript - Uncaught TypeError: o.widget is not a function at mouse.min.js Wordpress