r - 在 dplyr 的 group_by 中有条件地删除重复行
问题描述
我知道那里有很多删除重复项的方法,但我的问题似乎不同。
我有一个data.frame
类似的:
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
x <- data.frame(id = c(1, 1, 1, 1, 2, 3, 3),
date = as.Date(c("2016-04-24", "2016-04-24", "2016-04-24",
"2016-04-24", "2016-04-24", "2016-04-28",
"2016-04-28")),
code = c("a", "b", "b", "a", "a", "a", "a"))
x
#> id date code
#> 1 1 2016-04-24 a
#> 2 1 2016-04-24 b
#> 3 1 2016-04-24 b
#> 4 1 2016-04-24 a
#> 5 2 2016-04-24 a
#> 6 3 2016-04-28 a
#> 7 3 2016-04-28 a
我想过滤掉code
“a”而不是“b”的所有重复项。预期的输出应如下所示:
x[c(1:3, 5:6), ]
#> id date code
#> 1 1 2016-04-24 a
#> 2 1 2016-04-24 b
#> 3 1 2016-04-24 b
#> 5 2 2016-04-24 a
#> 6 3 2016-04-28 a
我在这里有一个类似的问题:在 dplyr 中的 group_by 内有条件地忽略值,我以此为基础进行以下尝试。但这些不起作用,这让我发疯。
x %>% group_by(id, date) %>%
filter(!(code == "a" & duplicated(code) == "a"))
#> # A tibble: 7 x 3
#> # Groups: id, date [3]
#> id date code
#> <dbl> <date> <fct>
#> 1 1. 2016-04-24 a
#> 2 1. 2016-04-24 b
#> 3 1. 2016-04-24 b
#> 4 1. 2016-04-24 a
#> 5 2. 2016-04-24 a
#> 6 3. 2016-04-28 a
#> 7 3. 2016-04-28 a
x %>% group_by(id, date) %>%
filter(!(duplicated(code) == "a" & "a" %in% code))
#> # A tibble: 7 x 3
#> # Groups: id, date [3]
#> id date code
#> <dbl> <date> <fct>
#> 1 1. 2016-04-24 a
#> 2 1. 2016-04-24 b
#> 3 1. 2016-04-24 b
#> 4 1. 2016-04-24 a
#> 5 2. 2016-04-24 a
#> 6 3. 2016-04-28 a
#> 7 3. 2016-04-28 a
由reprex 包(v0.2.0) 于 2018 年 8 月 17 日创建。
我想问题duplicated()
出在没有返回的电话上,TRUE
或者FALSE
我不确定。
解决方案
按'id','date'分组后,获取'code'为'a'的逻辑向量,使用duplicated
它或'code'不是'a'
x %>%
group_by(id, date) %>%
filter(!duplicated(code == "a") | code != 'a')
# A tibble: 5 x 3
# Groups: id, date [3]
# id date code
# <dbl> <date> <fct>
#1 1 2016-04-24 a
#2 1 2016-04-24 b
#3 1 2016-04-24 b
#4 2 2016-04-24 a
#5 3 2016-04-28 a
推荐阅读
- python - 检查机器人框架中是否已定义变量后如何定义变量
- c# - 以编程方式将带有自定义控件的网格添加到 WPF TabControl 不会出现
- javascript - 使用 ngFor 遍历字符串中的每个字符?
- python - Python:如何在多个函数中编辑(全局)变量?
- jquery - jQuery简单的下拉菜单
- javascript - Vue 可重用的模态包装器
- excel - 如何在 vb 中的每个非空单元格之后在 excel 中添加预定义的行
- javascript - 如何使用javascript将字符串转换为对象并在snake_case中返回一些键?
- javascript - 无法从 chrome 扩展中的后台脚本向内容脚本发送消息
- python - 将numpy数组转换为数据框