gpt4 book ai didi

在 dplyr 的 group_by 中有条件地删除重复行

转载 作者:行者123 更新时间:2023-12-04 10:09:11 25 4
gpt4 key购买 nike

我知道有很多关于删除重复项的内容,但我的问题似乎有所不同。


我有一个类似这样的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

我在这里有一个类似的问题:Ignore value conditionally within group_by in dplyr我基于此进行以下尝试。但这些都不起作用,这让我抓狂。

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 package 创建于 2018-08-17 (v0.2.0).

我猜问题是 duplicated() 调用没有返回 TRUEFALSE 但我不确定。

最佳答案

按“id”、“date”分组后,获取“code”为“a”的逻辑向量,在其上或“code”不是“a”的地方使用duplicated

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

关于在 dplyr 的 group_by 中有条件地删除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51898767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com